diff --git a/changelog/21.0/21.0.0/summary.md b/changelog/21.0/21.0.0/summary.md
index 7946293f506..49c8b41d45f 100644
--- a/changelog/21.0/21.0.0/summary.md
+++ b/changelog/21.0/21.0.0/summary.md
@@ -8,6 +8,7 @@
- [Deletion of deprecated metrics](#metric-deletion)
- [VTTablet Flags](#vttablet-flags)
- **[Breaking changes](#breaking-changes)**
+ - **[Traffic Mirroring](#traffic-mirroring)**
## Major Changes
@@ -38,3 +39,14 @@ The following metrics that were deprecated in the previous release, have now bee
- `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.
+### 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`.
diff --git a/go/cmd/vtcombo/cli/main.go b/go/cmd/vtcombo/cli/main.go
index 189441594bb..5f27e581a24 100644
--- a/go/cmd/vtcombo/cli/main.go
+++ b/go/cmd/vtcombo/cli/main.go
@@ -206,6 +206,11 @@ func run(cmd *cobra.Command, args []string) (err error) {
return fmt.Errorf("Failed to load routing rules: %w", err)
}
+ // attempt to load any mirror rules specified by tpb
+ if err := vtcombo.InitMirrorRules(context.Background(), ts, tpb.GetMirrorRules()); err != nil {
+ return fmt.Errorf("Failed to load mirror rules: %w", err)
+ }
+
servenv.Init()
tabletenv.Init()
diff --git a/go/cmd/vtctldclient/command/mirror_rules.go b/go/cmd/vtctldclient/command/mirror_rules.go
new file mode 100644
index 00000000000..d143546b1a8
--- /dev/null
+++ b/go/cmd/vtctldclient/command/mirror_rules.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 command
+
+import (
+ "fmt"
+
+ "github.com/spf13/cobra"
+
+ "vitess.io/vitess/go/cmd/vtctldclient/cli"
+
+ vtctldatapb "vitess.io/vitess/go/vt/proto/vtctldata"
+)
+
+// GetMirrorRules makes a GetMirrorRules gRPC call to a vtctld.
+var GetMirrorRules = &cobra.Command{
+ Use: "GetMirrorRules",
+ Short: "Displays the VSchema mirror rules.",
+ DisableFlagsInUseLine: true,
+ Args: cobra.NoArgs,
+ RunE: commandGetMirrorRules,
+}
+
+func commandGetMirrorRules(cmd *cobra.Command, args []string) error {
+ cli.FinishedParsing(cmd)
+
+ resp, err := client.GetMirrorRules(commandCtx, &vtctldatapb.GetMirrorRulesRequest{})
+ if err != nil {
+ return err
+ }
+
+ data, err := cli.MarshalJSON(resp.MirrorRules)
+ if err != nil {
+ return err
+ }
+
+ fmt.Printf("%s\n", data)
+
+ return nil
+}
+
+func init() {
+ Root.AddCommand(GetMirrorRules)
+}
diff --git a/go/cmd/vtctldclient/command/vreplication/common/mirrortraffic.go b/go/cmd/vtctldclient/command/vreplication/common/mirrortraffic.go
new file mode 100644
index 00000000000..68f0cfbc68c
--- /dev/null
+++ b/go/cmd/vtctldclient/command/vreplication/common/mirrortraffic.go
@@ -0,0 +1,89 @@
+/*
+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 common
+
+import (
+ "bytes"
+ "fmt"
+
+ "github.com/spf13/cobra"
+
+ "vitess.io/vitess/go/cmd/vtctldclient/cli"
+
+ topodatapb "vitess.io/vitess/go/vt/proto/topodata"
+ vtctldatapb "vitess.io/vitess/go/vt/proto/vtctldata"
+)
+
+func GetMirrorTrafficCommand(opts *SubCommandsOpts) *cobra.Command {
+ cmd := &cobra.Command{
+ Use: "mirrortraffic",
+ Short: fmt.Sprintf("Mirror traffic for a %s MoveTables workflow.", opts.SubCommand),
+ Example: fmt.Sprintf(`vtctldclient --server localhost:15999 %s --workflow %s --target-keyspace customer mirrortraffic --percent 5.0`, opts.SubCommand, opts.Workflow),
+ DisableFlagsInUseLine: true,
+ Aliases: []string{"MirrorTraffic"},
+ Args: cobra.NoArgs,
+ PreRun: func(cmd *cobra.Command, args []string) {
+ if !cmd.Flags().Lookup("tablet-types").Changed {
+ // We mirror traffic for all tablet types if none are provided.
+ MirrorTrafficOptions.TabletTypes = []topodatapb.TabletType{
+ topodatapb.TabletType_PRIMARY,
+ topodatapb.TabletType_REPLICA,
+ topodatapb.TabletType_RDONLY,
+ }
+ }
+ },
+ RunE: commandMirrorTraffic,
+ }
+ return cmd
+}
+
+func commandMirrorTraffic(cmd *cobra.Command, args []string) error {
+ format, err := GetOutputFormat(cmd)
+ if err != nil {
+ return err
+ }
+
+ cli.FinishedParsing(cmd)
+
+ req := &vtctldatapb.WorkflowMirrorTrafficRequest{
+ Keyspace: BaseOptions.TargetKeyspace,
+ Workflow: BaseOptions.Workflow,
+ TabletTypes: MirrorTrafficOptions.TabletTypes,
+ Percent: MirrorTrafficOptions.Percent,
+ }
+ resp, err := GetClient().WorkflowMirrorTraffic(GetCommandCtx(), req)
+ if err != nil {
+ return err
+ }
+
+ var output []byte
+ if format == "json" {
+ output, err = cli.MarshalJSONPretty(resp)
+ if err != nil {
+ return err
+ }
+ } else {
+ tout := bytes.Buffer{}
+ tout.WriteString(resp.Summary + "\n\n")
+ tout.WriteString(fmt.Sprintf("Start State: %s\n", resp.StartState))
+ tout.WriteString(fmt.Sprintf("Current State: %s\n", resp.CurrentState))
+ output = tout.Bytes()
+ }
+ fmt.Printf("%s\n", output)
+
+ return nil
+}
diff --git a/go/cmd/vtctldclient/command/vreplication/common/utils.go b/go/cmd/vtctldclient/command/vreplication/common/utils.go
index a742f31a9ff..cb408add490 100644
--- a/go/cmd/vtctldclient/command/vreplication/common/utils.go
+++ b/go/cmd/vtctldclient/command/vreplication/common/utils.go
@@ -224,6 +224,12 @@ func AddCommonCreateFlags(cmd *cobra.Command) {
cmd.Flags().BoolVar(&CreateOptions.StopAfterCopy, "stop-after-copy", false, "Stop the workflow after it's finished copying the existing rows and before it starts replicating changes.")
}
+var MirrorTrafficOptions = struct {
+ DryRun bool
+ Percent float32
+ TabletTypes []topodatapb.TabletType
+}{}
+
var SwitchTrafficOptions = struct {
Cells []string
TabletTypes []topodatapb.TabletType
diff --git a/go/cmd/vtctldclient/command/vreplication/movetables/movetables.go b/go/cmd/vtctldclient/command/vreplication/movetables/movetables.go
index d729230e7a7..4d8f9eaf3f0 100644
--- a/go/cmd/vtctldclient/command/vreplication/movetables/movetables.go
+++ b/go/cmd/vtctldclient/command/vreplication/movetables/movetables.go
@@ -20,6 +20,7 @@ import (
"github.com/spf13/cobra"
"vitess.io/vitess/go/cmd/vtctldclient/command/vreplication/common"
+ "vitess.io/vitess/go/vt/topo/topoproto"
)
var (
@@ -67,6 +68,11 @@ func registerCommands(root *cobra.Command) {
base.AddCommand(common.GetStartCommand(opts))
base.AddCommand(common.GetStopCommand(opts))
+ mirrorTrafficCommand := common.GetMirrorTrafficCommand(opts)
+ mirrorTrafficCommand.Flags().Var((*topoproto.TabletTypeListFlag)(&common.MirrorTrafficOptions.TabletTypes), "tablet-types", "Tablet types to mirror traffic for.")
+ mirrorTrafficCommand.Flags().Float32Var(&common.MirrorTrafficOptions.Percent, "percent", 1.0, "Percentage of traffic to mirror.")
+ base.AddCommand(mirrorTrafficCommand)
+
switchTrafficCommand := common.GetSwitchTrafficCommand(opts)
common.AddCommonSwitchTrafficFlags(switchTrafficCommand, true)
common.AddShardSubsetFlag(switchTrafficCommand, &common.SwitchTrafficOptions.Shards)
diff --git a/go/flags/endtoend/vtctldclient.txt b/go/flags/endtoend/vtctldclient.txt
index 393b9ada10d..45dcae2704a 100644
--- a/go/flags/endtoend/vtctldclient.txt
+++ b/go/flags/endtoend/vtctldclient.txt
@@ -42,6 +42,7 @@ Available Commands:
GetKeyspace Returns information about the given keyspace from the topology.
GetKeyspaceRoutingRules Displays the currently active keyspace routing rules.
GetKeyspaces Returns information about every keyspace in the topology.
+ GetMirrorRules Displays the VSchema mirror rules.
GetPermissions Displays the permissions for a tablet.
GetRoutingRules Displays the VSchema routing rules.
GetSchema Displays the full schema for a tablet, optionally restricted to the specified tables/views.
diff --git a/go/test/endtoend/vreplication/movetables_mirrortraffic_test.go b/go/test/endtoend/vreplication/movetables_mirrortraffic_test.go
new file mode 100644
index 00000000000..54e648de6b4
--- /dev/null
+++ b/go/test/endtoend/vreplication/movetables_mirrortraffic_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 vreplication
+
+import (
+ "testing"
+
+ binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata"
+ topodatapb "vitess.io/vitess/go/vt/proto/topodata"
+)
+
+func testMoveTablesMirrorTraffic(t *testing.T, flavor workflowFlavor) {
+ setSidecarDBName("_vt")
+ vc = setupMinimalCluster(t)
+ defer vc.TearDown()
+
+ sourceKeyspace := "product"
+ targetKeyspace := "customer"
+ workflowName := "wf1"
+ tables := []string{"customer", "loadtest", "customer2"}
+
+ _ = setupMinimalCustomerKeyspace(t)
+
+ mtwf := &moveTablesWorkflow{
+ workflowInfo: &workflowInfo{
+ vc: vc,
+ workflowName: workflowName,
+ targetKeyspace: targetKeyspace,
+ },
+ sourceKeyspace: sourceKeyspace,
+ tables: "customer,loadtest,customer2",
+ mirrorFlags: []string{"--percent", "25"},
+ }
+ mt := newMoveTables(vc, mtwf, flavor)
+
+ // Mirror rules do not exist by default.
+ mt.Create()
+ confirmNoMirrorRules(t)
+
+ waitForWorkflowState(t, vc, ksWorkflow, binlogdatapb.VReplicationWorkflowState_Running.String())
+
+ // Mirror rules can be created after a MoveTables workflow is created.
+ mt.MirrorTraffic()
+ confirmMirrorRulesExist(t)
+ expectMirrorRules(t, sourceKeyspace, targetKeyspace, tables, []topodatapb.TabletType{
+ topodatapb.TabletType_PRIMARY,
+ topodatapb.TabletType_REPLICA,
+ topodatapb.TabletType_RDONLY,
+ }, 25)
+
+ // Mirror rules can be adjusted after mirror rules are in place.
+ mtwf.mirrorFlags[1] = "50"
+ mt.MirrorTraffic()
+ confirmMirrorRulesExist(t)
+ expectMirrorRules(t, sourceKeyspace, targetKeyspace, tables, []topodatapb.TabletType{
+ topodatapb.TabletType_PRIMARY,
+ topodatapb.TabletType_REPLICA,
+ topodatapb.TabletType_RDONLY,
+ }, 50)
+
+ // Mirror rules can be adjusted multiple times after mirror rules are in
+ // place.
+ mtwf.mirrorFlags[1] = "75"
+ mt.MirrorTraffic()
+ confirmMirrorRulesExist(t)
+ expectMirrorRules(t, sourceKeyspace, targetKeyspace, tables, []topodatapb.TabletType{
+ topodatapb.TabletType_PRIMARY,
+ topodatapb.TabletType_REPLICA,
+ topodatapb.TabletType_RDONLY,
+ }, 75)
+
+ lg := newLoadGenerator(t, vc)
+ go func() {
+ lg.start()
+ }()
+ lg.waitForCount(1000)
+
+ mt.SwitchReads()
+ confirmMirrorRulesExist(t)
+
+ // Mirror rules can be adjusted for writes after reads have been switched.
+ mtwf.mirrorFlags[1] = "100"
+ mtwf.mirrorFlags = append(mtwf.mirrorFlags, "--tablet-types", "primary")
+ mt.MirrorTraffic()
+ confirmMirrorRulesExist(t)
+ expectMirrorRules(t, sourceKeyspace, targetKeyspace, tables, []topodatapb.TabletType{
+ topodatapb.TabletType_PRIMARY,
+ }, 100)
+
+ // Mirror rules are removed after writes are switched.
+ mt.SwitchWrites()
+ confirmNoMirrorRules(t)
+}
+
+func TestMoveTablesMirrorTraffic(t *testing.T) {
+ currentWorkflowType = binlogdatapb.VReplicationWorkflowType_MoveTables
+ t.Run(workflowFlavorNames[workflowFlavorVtctld], func(t *testing.T) {
+ testMoveTablesMirrorTraffic(t, workflowFlavorVtctld)
+ })
+}
diff --git a/go/test/endtoend/vreplication/resharding_workflows_v2_test.go b/go/test/endtoend/vreplication/resharding_workflows_v2_test.go
index 82c859acb40..78ad843ca1d 100644
--- a/go/test/endtoend/vreplication/resharding_workflows_v2_test.go
+++ b/go/test/endtoend/vreplication/resharding_workflows_v2_test.go
@@ -52,6 +52,7 @@ const (
const (
workflowActionCreate = "Create"
+ workflowActionMirrorTraffic = "Mirror"
workflowActionSwitchTraffic = "SwitchTraffic"
workflowActionReverseTraffic = "ReverseTraffic"
workflowActionComplete = "Complete"
@@ -70,6 +71,7 @@ type workflowExecOptions struct {
deferSecondaryKeys bool
atomicCopy bool
shardSubset string
+ percent float32
}
var defaultWorkflowExecOptions = &workflowExecOptions{
@@ -222,6 +224,8 @@ func tstWorkflowExecVtctl(t *testing.T, cells, workflow, sourceKs, targetKs, tab
}
args = append(args, "--initialize-target-sequences") // Only used for MoveTables
}
+ case workflowActionMirrorTraffic:
+ args = append(args, "--percent", strconv.FormatFloat(float64(options.percent), byte('f'), -1, 32))
default:
if options.shardSubset != "" {
args = append(args, "--shards", options.shardSubset)
diff --git a/go/test/endtoend/vreplication/vreplication_test_env.go b/go/test/endtoend/vreplication/vreplication_test_env.go
index 6073cfac6ab..238242f0e65 100644
--- a/go/test/endtoend/vreplication/vreplication_test_env.go
+++ b/go/test/endtoend/vreplication/vreplication_test_env.go
@@ -17,6 +17,7 @@ limitations under the License.
package vreplication
var dryRunResultsSwitchWritesCustomerShard = []string{
+ "Mirroring 0.00 percent of traffic from keyspace product to keyspace customer for tablet types [PRIMARY]",
"Lock keyspace product",
"Lock keyspace customer",
"/Stop writes on keyspace product for tables [Lead,Lead-1,blüb_tbl,customer,db_order_test,geom_tbl,json_tbl,loadtest,reftable,vdiff_order]: [keyspace:product;shard:0;position:",
@@ -35,6 +36,7 @@ var dryRunResultsSwitchWritesCustomerShard = []string{
}
var dryRunResultsReadCustomerShard = []string{
+ "Mirroring 0.00 percent of traffic from keyspace product to keyspace customer for tablet types [RDONLY,REPLICA]",
"Lock keyspace product",
"Switch reads for tables [Lead,Lead-1,blüb_tbl,customer,db_order_test,geom_tbl,json_tbl,loadtest,reftable,vdiff_order] to keyspace customer for tablet types [RDONLY,REPLICA]",
"Routing rules for tables [Lead,Lead-1,blüb_tbl,customer,db_order_test,geom_tbl,json_tbl,loadtest,reftable,vdiff_order] will be updated",
diff --git a/go/test/endtoend/vreplication/vreplication_vtctldclient_cli_test.go b/go/test/endtoend/vreplication/vreplication_vtctldclient_cli_test.go
index 4a3f16a1cc9..a69d55c3417 100644
--- a/go/test/endtoend/vreplication/vreplication_vtctldclient_cli_test.go
+++ b/go/test/endtoend/vreplication/vreplication_vtctldclient_cli_test.go
@@ -36,6 +36,7 @@ import (
topodatapb "vitess.io/vitess/go/vt/proto/topodata"
vschemapb "vitess.io/vitess/go/vt/proto/vschema"
vtctldatapb "vitess.io/vitess/go/vt/proto/vtctldata"
+ "vitess.io/vitess/go/vt/topo/topoproto"
)
// TestVtctldclientCLI tests the vreplication vtctldclient CLI commands, primarily to check that non-standard flags
@@ -395,6 +396,48 @@ func checkTablesExist(t *testing.T, tabletAlias string, tables []string) bool {
return true
}
+func getMirrorRules(t *testing.T) *vschemapb.MirrorRules {
+ mirrorRules, err := vc.VtctldClient.ExecuteCommandWithOutput("GetMirrorRules")
+ require.NoError(t, err)
+ var mirrorRulesResponse vschemapb.MirrorRules
+ err = protojson.Unmarshal([]byte(mirrorRules), &mirrorRulesResponse)
+ require.NoError(t, err)
+ return &mirrorRulesResponse
+}
+
+func confirmNoMirrorRules(t *testing.T) {
+ mirrorRulesResponse := getMirrorRules(t)
+ require.Zero(t, len(mirrorRulesResponse.Rules))
+}
+
+func confirmMirrorRulesExist(t *testing.T) {
+ mirrorRulesResponse := getMirrorRules(t)
+ require.NotZero(t, len(mirrorRulesResponse.Rules))
+}
+
+func expectMirrorRules(t *testing.T, sourceKeyspace, targetKeyspace string, tables []string, tabletTypes []topodatapb.TabletType, percent float32) {
+ t.Helper()
+
+ // Each table should have a mirror rule for each serving type.
+ mirrorRules := getMirrorRules(t)
+ require.Len(t, mirrorRules.Rules, len(tables)*len(tabletTypes))
+ fromTableToRule := make(map[string]*vschemapb.MirrorRule)
+ for _, rule := range mirrorRules.Rules {
+ fromTableToRule[rule.FromTable] = rule
+ }
+ for _, table := range tables {
+ for _, tabletType := range tabletTypes {
+ fromTable := fmt.Sprintf("%s.%s", sourceKeyspace, table)
+ if tabletType != topodatapb.TabletType_PRIMARY {
+ fromTable = fmt.Sprintf("%s@%s", fromTable, topoproto.TabletTypeLString(tabletType))
+ }
+ require.Contains(t, fromTableToRule, fromTable)
+ require.Equal(t, fmt.Sprintf("%s.%s", targetKeyspace, table), fromTableToRule[fromTable].ToTable)
+ require.Equal(t, percent, fromTableToRule[fromTable].Percent)
+ }
+ }
+}
+
func getRoutingRules(t *testing.T) *vschemapb.RoutingRules {
routingRules, err := vc.VtctldClient.ExecuteCommandWithOutput("GetRoutingRules")
require.NoError(t, err)
diff --git a/go/test/endtoend/vreplication/wrappers_test.go b/go/test/endtoend/vreplication/wrappers_test.go
index e1028fafa9f..96c54b89fe8 100644
--- a/go/test/endtoend/vreplication/wrappers_test.go
+++ b/go/test/endtoend/vreplication/wrappers_test.go
@@ -29,6 +29,7 @@ import (
type iWorkflow interface {
Create()
Show()
+ MirrorTraffic()
SwitchReads()
SwitchWrites()
SwitchReadsAndWrites()
@@ -79,6 +80,7 @@ type moveTablesWorkflow struct {
lastOutput string
createFlags []string
completeFlags []string
+ mirrorFlags []string
switchFlags []string
showFlags []string
}
@@ -122,6 +124,11 @@ func (vmt *VtctlMoveTables) Create() {
vmt.exec(workflowActionCreate)
}
+func (vmt *VtctlMoveTables) MirrorTraffic() {
+ // TODO implement me
+ panic("implement me")
+}
+
func (vmt *VtctlMoveTables) SwitchReadsAndWrites() {
err := tstWorkflowExecVtctl(vmt.vc.t, "", vmt.workflowName, vmt.sourceKeyspace, vmt.targetKeyspace,
vmt.tables, workflowActionSwitchTraffic, "", "", "", defaultWorkflowExecOptions)
@@ -218,6 +225,12 @@ func (v VtctldMoveTables) Create() {
v.exec(args...)
}
+func (v VtctldMoveTables) MirrorTraffic() {
+ args := []string{"MirrorTraffic"}
+ args = append(args, v.mirrorFlags...)
+ v.exec(args...)
+}
+
func (v VtctldMoveTables) SwitchReadsAndWrites() {
args := []string{"SwitchTraffic"}
args = append(args, v.switchFlags...)
@@ -323,6 +336,11 @@ func (vrs *VtctlReshard) Create() {
vrs.exec(workflowActionCreate)
}
+func (vrs *VtctlReshard) MirrorTraffic() {
+ // TODO implement me
+ panic("implement me")
+}
+
func (vrs *VtctlReshard) SwitchReadsAndWrites() {
vrs.exec(workflowActionSwitchTraffic)
}
@@ -411,6 +429,11 @@ func (v VtctldReshard) Create() {
v.exec(args...)
}
+func (v VtctldReshard) MirrorTraffic() {
+ // TODO implement me
+ panic("implement me")
+}
+
func (v VtctldReshard) SwitchReadsAndWrites() {
args := []string{"SwitchTraffic"}
args = append(args, v.switchFlags...)
diff --git a/go/vt/proto/vschema/vschema.pb.go b/go/vt/proto/vschema/vschema.pb.go
index 5cb14d3a522..131622aaf5b 100644
--- a/go/vt/proto/vschema/vschema.pb.go
+++ b/go/vt/proto/vschema/vschema.pb.go
@@ -784,6 +784,7 @@ type SrvVSchema struct {
RoutingRules *RoutingRules `protobuf:"bytes,2,opt,name=routing_rules,json=routingRules,proto3" json:"routing_rules,omitempty"` // table routing rules
ShardRoutingRules *ShardRoutingRules `protobuf:"bytes,3,opt,name=shard_routing_rules,json=shardRoutingRules,proto3" json:"shard_routing_rules,omitempty"`
KeyspaceRoutingRules *KeyspaceRoutingRules `protobuf:"bytes,4,opt,name=keyspace_routing_rules,json=keyspaceRoutingRules,proto3" json:"keyspace_routing_rules,omitempty"`
+ MirrorRules *MirrorRules `protobuf:"bytes,5,opt,name=mirror_rules,json=mirrorRules,proto3" json:"mirror_rules,omitempty"` // mirror rules
}
func (x *SrvVSchema) Reset() {
@@ -846,6 +847,13 @@ func (x *SrvVSchema) GetKeyspaceRoutingRules() *KeyspaceRoutingRules {
return nil
}
+func (x *SrvVSchema) GetMirrorRules() *MirrorRules {
+ if x != nil {
+ return x.MirrorRules
+ }
+ return nil
+}
+
// ShardRoutingRules specify the shard routing rules for the VSchema.
type ShardRoutingRules struct {
state protoimpl.MessageState
@@ -1060,6 +1068,121 @@ func (x *KeyspaceRoutingRule) GetToKeyspace() string {
return ""
}
+// MirrorRules specify the high level mirror rules for the VSchema.
+type MirrorRules struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // rules should ideally be a map. However protos dont't allow
+ // repeated fields as elements of a map. So, we use a list
+ // instead.
+ Rules []*MirrorRule `protobuf:"bytes,1,rep,name=rules,proto3" json:"rules,omitempty"`
+}
+
+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)
+ }
+}
+
+func (x *MirrorRules) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MirrorRules) ProtoMessage() {}
+
+func (x *MirrorRules) ProtoReflect() protoreflect.Message {
+ mi := &file_vschema_proto_msgTypes[14]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use MirrorRules.ProtoReflect.Descriptor instead.
+func (*MirrorRules) Descriptor() ([]byte, []int) {
+ return file_vschema_proto_rawDescGZIP(), []int{14}
+}
+
+func (x *MirrorRules) GetRules() []*MirrorRule {
+ if x != nil {
+ return x.Rules
+ }
+ return nil
+}
+
+// MirrorRule specifies a mirror rule.
+type MirrorRule struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ FromTable string `protobuf:"bytes,1,opt,name=from_table,json=fromTable,proto3" json:"from_table,omitempty"`
+ ToTable string `protobuf:"bytes,2,opt,name=to_table,json=toTable,proto3" json:"to_table,omitempty"`
+ Percent float32 `protobuf:"fixed32,3,opt,name=percent,proto3" json:"percent,omitempty"`
+}
+
+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)
+ }
+}
+
+func (x *MirrorRule) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MirrorRule) ProtoMessage() {}
+
+func (x *MirrorRule) ProtoReflect() protoreflect.Message {
+ mi := &file_vschema_proto_msgTypes[15]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use MirrorRule.ProtoReflect.Descriptor instead.
+func (*MirrorRule) Descriptor() ([]byte, []int) {
+ return file_vschema_proto_rawDescGZIP(), []int{15}
+}
+
+func (x *MirrorRule) GetFromTable() string {
+ if x != nil {
+ return x.FromTable
+ }
+ return ""
+}
+
+func (x *MirrorRule) GetToTable() string {
+ if x != nil {
+ return x.ToTable
+ }
+ return ""
+}
+
+func (x *MirrorRule) GetPercent() float32 {
+ if x != nil {
+ return x.Percent
+ }
+ return 0
+}
+
var File_vschema_proto protoreflect.FileDescriptor
var file_vschema_proto_rawDesc = []byte{
@@ -1175,7 +1298,7 @@ var file_vschema_proto_rawDesc = []byte{
0x00, 0x52, 0x08, 0x6e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x16,
0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06,
0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x61,
- 0x62, 0x6c, 0x65, 0x22, 0xfc, 0x02, 0x0a, 0x0a, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65,
+ 0x62, 0x6c, 0x65, 0x22, 0xb5, 0x03, 0x0a, 0x0a, 0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65,
0x6d, 0x61, 0x12, 0x40, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18,
0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e,
0x53, 0x72, 0x76, 0x56, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70,
@@ -1194,37 +1317,50 @@ var file_vschema_proto_rawDesc = []byte{
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, 0x1a, 0x4f, 0x0a, 0x0e, 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, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b,
- 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
- 0x38, 0x01, 0x22, 0x44, 0x0a, 0x11, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69,
- 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73,
- 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 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, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x6e, 0x0a, 0x10, 0x53, 0x68, 0x61, 0x72,
- 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0d,
- 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x72, 0x6f, 0x6d, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x6f, 0x4b, 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, 0x4a, 0x0a, 0x14, 0x4b, 0x65, 0x79, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73,
- 0x12, 0x32, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
- 0x1c, 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, 0x52, 0x05, 0x72,
- 0x75, 0x6c, 0x65, 0x73, 0x22, 0x5b, 0x0a, 0x13, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66,
- 0x72, 0x6f, 0x6d, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x0c, 0x66, 0x72, 0x6f, 0x6d, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63,
- 0x65, 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, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x33,
+ 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x72, 0x75, 0x6c, 0x65,
+ 0x73, 0x18, 0x05, 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, 0x1a, 0x4f, 0x0a, 0x0e, 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, 0x27,
+ 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e,
+ 0x76, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x44, 0x0a, 0x11, 0x53,
+ 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73,
+ 0x12, 0x2f, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
+ 0x19, 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, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65,
+ 0x73, 0x22, 0x6e, 0x0a, 0x10, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e,
+ 0x67, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6b, 0x65,
+ 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x72,
+ 0x6f, 0x6d, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f,
+ 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x0a, 0x74, 0x6f, 0x4b, 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, 0x4a, 0x0a, 0x14, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75,
+ 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x72, 0x75, 0x6c,
+ 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 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, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x5b, 0x0a,
+ 0x13, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67,
+ 0x52, 0x75, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6b, 0x65, 0x79,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x72, 0x6f,
+ 0x6d, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x5f,
+ 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a,
+ 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x38, 0x0a, 0x0b, 0x4d, 0x69,
+ 0x72, 0x72, 0x6f, 0x72, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x05, 0x72, 0x75, 0x6c,
+ 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x76, 0x73, 0x63, 0x68, 0x65,
+ 0x6d, 0x61, 0x2e, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72,
+ 0x75, 0x6c, 0x65, 0x73, 0x22, 0x60, 0x0a, 0x0a, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x75,
+ 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x54, 0x61, 0x62, 0x6c,
+ 0x65, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x6f, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07,
+ 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x70,
+ 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 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, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x62, 0x06,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -1240,7 +1376,7 @@ func file_vschema_proto_rawDescGZIP() []byte {
}
var file_vschema_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
-var file_vschema_proto_msgTypes = make([]protoimpl.MessageInfo, 18)
+var file_vschema_proto_msgTypes = make([]protoimpl.MessageInfo, 20)
var file_vschema_proto_goTypes = []any{
(Keyspace_ForeignKeyMode)(0), // 0: vschema.Keyspace.ForeignKeyMode
(*RoutingRules)(nil), // 1: vschema.RoutingRules
@@ -1257,38 +1393,42 @@ var file_vschema_proto_goTypes = []any{
(*ShardRoutingRule)(nil), // 12: vschema.ShardRoutingRule
(*KeyspaceRoutingRules)(nil), // 13: vschema.KeyspaceRoutingRules
(*KeyspaceRoutingRule)(nil), // 14: vschema.KeyspaceRoutingRule
- nil, // 15: vschema.Keyspace.VindexesEntry
- nil, // 16: vschema.Keyspace.TablesEntry
- nil, // 17: vschema.Vindex.ParamsEntry
- nil, // 18: vschema.SrvVSchema.KeyspacesEntry
- (query.Type)(0), // 19: query.Type
+ (*MirrorRules)(nil), // 15: vschema.MirrorRules
+ (*MirrorRule)(nil), // 16: vschema.MirrorRule
+ nil, // 17: vschema.Keyspace.VindexesEntry
+ nil, // 18: vschema.Keyspace.TablesEntry
+ nil, // 19: vschema.Vindex.ParamsEntry
+ nil, // 20: vschema.SrvVSchema.KeyspacesEntry
+ (query.Type)(0), // 21: query.Type
}
var file_vschema_proto_depIdxs = []int32{
2, // 0: vschema.RoutingRules.rules:type_name -> vschema.RoutingRule
- 15, // 1: vschema.Keyspace.vindexes:type_name -> vschema.Keyspace.VindexesEntry
- 16, // 2: vschema.Keyspace.tables:type_name -> vschema.Keyspace.TablesEntry
+ 17, // 1: vschema.Keyspace.vindexes:type_name -> vschema.Keyspace.VindexesEntry
+ 18, // 2: vschema.Keyspace.tables:type_name -> vschema.Keyspace.TablesEntry
0, // 3: vschema.Keyspace.foreign_key_mode:type_name -> vschema.Keyspace.ForeignKeyMode
4, // 4: vschema.Keyspace.multi_tenant_spec:type_name -> vschema.MultiTenantSpec
- 19, // 5: vschema.MultiTenantSpec.tenant_id_column_type:type_name -> query.Type
- 17, // 6: vschema.Vindex.params:type_name -> vschema.Vindex.ParamsEntry
+ 21, // 5: vschema.MultiTenantSpec.tenant_id_column_type:type_name -> query.Type
+ 19, // 6: vschema.Vindex.params:type_name -> vschema.Vindex.ParamsEntry
7, // 7: vschema.Table.column_vindexes:type_name -> vschema.ColumnVindex
8, // 8: vschema.Table.auto_increment:type_name -> vschema.AutoIncrement
9, // 9: vschema.Table.columns:type_name -> vschema.Column
- 19, // 10: vschema.Column.type:type_name -> query.Type
- 18, // 11: vschema.SrvVSchema.keyspaces:type_name -> vschema.SrvVSchema.KeyspacesEntry
+ 21, // 10: vschema.Column.type:type_name -> query.Type
+ 20, // 11: vschema.SrvVSchema.keyspaces:type_name -> vschema.SrvVSchema.KeyspacesEntry
1, // 12: vschema.SrvVSchema.routing_rules:type_name -> vschema.RoutingRules
11, // 13: vschema.SrvVSchema.shard_routing_rules:type_name -> vschema.ShardRoutingRules
13, // 14: vschema.SrvVSchema.keyspace_routing_rules:type_name -> vschema.KeyspaceRoutingRules
- 12, // 15: vschema.ShardRoutingRules.rules:type_name -> vschema.ShardRoutingRule
- 14, // 16: vschema.KeyspaceRoutingRules.rules:type_name -> vschema.KeyspaceRoutingRule
- 5, // 17: vschema.Keyspace.VindexesEntry.value:type_name -> vschema.Vindex
- 6, // 18: vschema.Keyspace.TablesEntry.value:type_name -> vschema.Table
- 3, // 19: vschema.SrvVSchema.KeyspacesEntry.value:type_name -> vschema.Keyspace
- 20, // [20:20] is the sub-list for method output_type
- 20, // [20:20] is the sub-list for method input_type
- 20, // [20:20] is the sub-list for extension type_name
- 20, // [20:20] is the sub-list for extension extendee
- 0, // [0:20] is the sub-list for field type_name
+ 15, // 15: vschema.SrvVSchema.mirror_rules:type_name -> vschema.MirrorRules
+ 12, // 16: vschema.ShardRoutingRules.rules:type_name -> vschema.ShardRoutingRule
+ 14, // 17: vschema.KeyspaceRoutingRules.rules:type_name -> vschema.KeyspaceRoutingRule
+ 16, // 18: vschema.MirrorRules.rules:type_name -> vschema.MirrorRule
+ 5, // 19: vschema.Keyspace.VindexesEntry.value:type_name -> vschema.Vindex
+ 6, // 20: vschema.Keyspace.TablesEntry.value:type_name -> vschema.Table
+ 3, // 21: vschema.SrvVSchema.KeyspacesEntry.value:type_name -> vschema.Keyspace
+ 22, // [22:22] is the sub-list for method output_type
+ 22, // [22:22] is the sub-list for method input_type
+ 22, // [22:22] is the sub-list for extension type_name
+ 22, // [22:22] is the sub-list for extension extendee
+ 0, // [0:22] is the sub-list for field type_name
}
func init() { file_vschema_proto_init() }
@@ -1465,6 +1605,30 @@ func file_vschema_proto_init() {
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{}
@@ -1473,7 +1637,7 @@ func file_vschema_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_vschema_proto_rawDesc,
NumEnums: 1,
- NumMessages: 18,
+ NumMessages: 20,
NumExtensions: 0,
NumServices: 0,
},
diff --git a/go/vt/proto/vschema/vschema_vtproto.pb.go b/go/vt/proto/vschema/vschema_vtproto.pb.go
index 8cf523f4009..1951f430a15 100644
--- a/go/vt/proto/vschema/vschema_vtproto.pb.go
+++ b/go/vt/proto/vschema/vschema_vtproto.pb.go
@@ -5,10 +5,12 @@
package vschema
import (
+ binary "encoding/binary"
fmt "fmt"
proto "google.golang.org/protobuf/proto"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
io "io"
+ math "math"
bits "math/bits"
query "vitess.io/vitess/go/vt/proto/query"
)
@@ -266,6 +268,7 @@ func (m *SrvVSchema) CloneVT() *SrvVSchema {
RoutingRules: m.RoutingRules.CloneVT(),
ShardRoutingRules: m.ShardRoutingRules.CloneVT(),
KeyspaceRoutingRules: m.KeyspaceRoutingRules.CloneVT(),
+ MirrorRules: m.MirrorRules.CloneVT(),
}
if rhs := m.Keyspaces; rhs != nil {
tmpContainer := make(map[string]*Keyspace, len(rhs))
@@ -370,6 +373,49 @@ func (m *KeyspaceRoutingRule) CloneMessageVT() proto.Message {
return m.CloneVT()
}
+func (m *MirrorRules) CloneVT() *MirrorRules {
+ if m == nil {
+ return (*MirrorRules)(nil)
+ }
+ r := &MirrorRules{}
+ if rhs := m.Rules; rhs != nil {
+ tmpContainer := make([]*MirrorRule, len(rhs))
+ for k, v := range rhs {
+ tmpContainer[k] = v.CloneVT()
+ }
+ r.Rules = tmpContainer
+ }
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *MirrorRules) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
+func (m *MirrorRule) CloneVT() *MirrorRule {
+ if m == nil {
+ return (*MirrorRule)(nil)
+ }
+ r := &MirrorRule{
+ FromTable: m.FromTable,
+ ToTable: m.ToTable,
+ Percent: m.Percent,
+ }
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *MirrorRule) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
func (m *RoutingRules) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
@@ -1016,6 +1062,16 @@ func (m *SrvVSchema) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
+ if m.MirrorRules != nil {
+ size, err := m.MirrorRules.MarshalToSizedBufferVT(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarint(dAtA, i, uint64(size))
+ i--
+ dAtA[i] = 0x2a
+ }
if m.KeyspaceRoutingRules != nil {
size, err := m.KeyspaceRoutingRules.MarshalToSizedBufferVT(dAtA[:i])
if err != nil {
@@ -1262,6 +1318,104 @@ func (m *KeyspaceRoutingRule) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
return len(dAtA) - i, nil
}
+func (m *MirrorRules) 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 *MirrorRules) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *MirrorRules) 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.Rules) > 0 {
+ for iNdEx := len(m.Rules) - 1; iNdEx >= 0; iNdEx-- {
+ size, err := m.Rules[iNdEx].MarshalToSizedBufferVT(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarint(dAtA, i, uint64(size))
+ i--
+ dAtA[i] = 0xa
+ }
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *MirrorRule) 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 *MirrorRule) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *MirrorRule) 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.Percent != 0 {
+ i -= 4
+ binary.LittleEndian.PutUint32(dAtA[i:], uint32(math.Float32bits(float32(m.Percent))))
+ i--
+ dAtA[i] = 0x1d
+ }
+ if len(m.ToTable) > 0 {
+ i -= len(m.ToTable)
+ copy(dAtA[i:], m.ToTable)
+ i = encodeVarint(dAtA, i, uint64(len(m.ToTable)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.FromTable) > 0 {
+ i -= len(m.FromTable)
+ copy(dAtA[i:], m.FromTable)
+ i = encodeVarint(dAtA, i, uint64(len(m.FromTable)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
func encodeVarint(dAtA []byte, offset int, v uint64) int {
offset -= sov(v)
base := offset
@@ -1558,6 +1712,10 @@ func (m *SrvVSchema) SizeVT() (n int) {
l = m.KeyspaceRoutingRules.SizeVT()
n += 1 + l + sov(uint64(l))
}
+ if m.MirrorRules != nil {
+ l = m.MirrorRules.SizeVT()
+ n += 1 + l + sov(uint64(l))
+ }
n += len(m.unknownFields)
return n
}
@@ -1634,6 +1792,43 @@ func (m *KeyspaceRoutingRule) SizeVT() (n int) {
return n
}
+func (m *MirrorRules) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if len(m.Rules) > 0 {
+ for _, e := range m.Rules {
+ l = e.SizeVT()
+ n += 1 + l + sov(uint64(l))
+ }
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
+func (m *MirrorRule) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.FromTable)
+ if l > 0 {
+ n += 1 + l + sov(uint64(l))
+ }
+ l = len(m.ToTable)
+ if l > 0 {
+ n += 1 + l + sov(uint64(l))
+ }
+ if m.Percent != 0 {
+ n += 5
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
func sov(x uint64) (n int) {
return (bits.Len64(x|1) + 6) / 7
}
@@ -3664,6 +3859,42 @@ func (m *SrvVSchema) UnmarshalVT(dAtA []byte) error {
return err
}
iNdEx = postIndex
+ case 5:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field MirrorRules", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.MirrorRules == nil {
+ m.MirrorRules = &MirrorRules{}
+ }
+ if err := m.MirrorRules.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skip(dAtA[iNdEx:])
@@ -4118,6 +4349,217 @@ func (m *KeyspaceRoutingRule) UnmarshalVT(dAtA []byte) error {
}
return nil
}
+func (m *MirrorRules) 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 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: MirrorRules: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: MirrorRules: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Rules", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Rules = append(m.Rules, &MirrorRule{})
+ if err := m.Rules[len(m.Rules)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return 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 *MirrorRule) 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 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: MirrorRule: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: MirrorRule: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field FromTable", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return 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 ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.FromTable = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ToTable", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return 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 ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ToTable = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 5 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Percent", wireType)
+ }
+ var v uint32
+ if (iNdEx + 4) > l {
+ return io.ErrUnexpectedEOF
+ }
+ v = uint32(binary.LittleEndian.Uint32(dAtA[iNdEx:]))
+ iNdEx += 4
+ m.Percent = float32(math.Float32frombits(v))
+ default:
+ iNdEx = preIndex
+ skippy, err := skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return 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 skip(dAtA []byte) (n int, err error) {
l := len(dAtA)
diff --git a/go/vt/proto/vtctldata/vtctldata.pb.go b/go/vt/proto/vtctldata/vtctldata.pb.go
index 4a6f9e25f2e..ae20ac21ec1 100644
--- a/go/vt/proto/vtctldata/vtctldata.pb.go
+++ b/go/vt/proto/vtctldata/vtctldata.pb.go
@@ -15568,6 +15568,225 @@ func (x *WorkflowUpdateResponse) GetDetails() []*WorkflowUpdateResponse_TabletIn
return nil
}
+type GetMirrorRulesRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *GetMirrorRulesRequest) Reset() {
+ *x = GetMirrorRulesRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_vtctldata_proto_msgTypes[245]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetMirrorRulesRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetMirrorRulesRequest) ProtoMessage() {}
+
+func (x *GetMirrorRulesRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_vtctldata_proto_msgTypes[245]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetMirrorRulesRequest.ProtoReflect.Descriptor instead.
+func (*GetMirrorRulesRequest) Descriptor() ([]byte, []int) {
+ return file_vtctldata_proto_rawDescGZIP(), []int{245}
+}
+
+type GetMirrorRulesResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ MirrorRules *vschema.MirrorRules `protobuf:"bytes,1,opt,name=mirror_rules,json=mirrorRules,proto3" json:"mirror_rules,omitempty"`
+}
+
+func (x *GetMirrorRulesResponse) Reset() {
+ *x = GetMirrorRulesResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_vtctldata_proto_msgTypes[246]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetMirrorRulesResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetMirrorRulesResponse) ProtoMessage() {}
+
+func (x *GetMirrorRulesResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_vtctldata_proto_msgTypes[246]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetMirrorRulesResponse.ProtoReflect.Descriptor instead.
+func (*GetMirrorRulesResponse) Descriptor() ([]byte, []int) {
+ return file_vtctldata_proto_rawDescGZIP(), []int{246}
+}
+
+func (x *GetMirrorRulesResponse) GetMirrorRules() *vschema.MirrorRules {
+ if x != nil {
+ return x.MirrorRules
+ }
+ return nil
+}
+
+type WorkflowMirrorTrafficRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Keyspace string `protobuf:"bytes,1,opt,name=keyspace,proto3" json:"keyspace,omitempty"`
+ Workflow string `protobuf:"bytes,2,opt,name=workflow,proto3" json:"workflow,omitempty"`
+ TabletTypes []topodata.TabletType `protobuf:"varint,3,rep,packed,name=tablet_types,json=tabletTypes,proto3,enum=topodata.TabletType" json:"tablet_types,omitempty"`
+ Percent float32 `protobuf:"fixed32,4,opt,name=percent,proto3" json:"percent,omitempty"`
+}
+
+func (x *WorkflowMirrorTrafficRequest) Reset() {
+ *x = WorkflowMirrorTrafficRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_vtctldata_proto_msgTypes[247]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *WorkflowMirrorTrafficRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WorkflowMirrorTrafficRequest) ProtoMessage() {}
+
+func (x *WorkflowMirrorTrafficRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_vtctldata_proto_msgTypes[247]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use WorkflowMirrorTrafficRequest.ProtoReflect.Descriptor instead.
+func (*WorkflowMirrorTrafficRequest) Descriptor() ([]byte, []int) {
+ return file_vtctldata_proto_rawDescGZIP(), []int{247}
+}
+
+func (x *WorkflowMirrorTrafficRequest) GetKeyspace() string {
+ if x != nil {
+ return x.Keyspace
+ }
+ return ""
+}
+
+func (x *WorkflowMirrorTrafficRequest) GetWorkflow() string {
+ if x != nil {
+ return x.Workflow
+ }
+ return ""
+}
+
+func (x *WorkflowMirrorTrafficRequest) GetTabletTypes() []topodata.TabletType {
+ if x != nil {
+ return x.TabletTypes
+ }
+ return nil
+}
+
+func (x *WorkflowMirrorTrafficRequest) GetPercent() float32 {
+ if x != nil {
+ return x.Percent
+ }
+ return 0
+}
+
+type WorkflowMirrorTrafficResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Summary string `protobuf:"bytes,1,opt,name=summary,proto3" json:"summary,omitempty"`
+ StartState string `protobuf:"bytes,2,opt,name=start_state,json=startState,proto3" json:"start_state,omitempty"`
+ CurrentState string `protobuf:"bytes,3,opt,name=current_state,json=currentState,proto3" json:"current_state,omitempty"`
+}
+
+func (x *WorkflowMirrorTrafficResponse) Reset() {
+ *x = WorkflowMirrorTrafficResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_vtctldata_proto_msgTypes[248]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *WorkflowMirrorTrafficResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WorkflowMirrorTrafficResponse) ProtoMessage() {}
+
+func (x *WorkflowMirrorTrafficResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_vtctldata_proto_msgTypes[248]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use WorkflowMirrorTrafficResponse.ProtoReflect.Descriptor instead.
+func (*WorkflowMirrorTrafficResponse) Descriptor() ([]byte, []int) {
+ return file_vtctldata_proto_rawDescGZIP(), []int{248}
+}
+
+func (x *WorkflowMirrorTrafficResponse) GetSummary() string {
+ if x != nil {
+ return x.Summary
+ }
+ return ""
+}
+
+func (x *WorkflowMirrorTrafficResponse) GetStartState() string {
+ if x != nil {
+ return x.StartState
+ }
+ return ""
+}
+
+func (x *WorkflowMirrorTrafficResponse) GetCurrentState() string {
+ if x != nil {
+ return x.CurrentState
+ }
+ return ""
+}
+
type Workflow_ReplicationLocation struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -15580,7 +15799,7 @@ type Workflow_ReplicationLocation struct {
func (x *Workflow_ReplicationLocation) Reset() {
*x = Workflow_ReplicationLocation{}
if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[246]
+ mi := &file_vtctldata_proto_msgTypes[250]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -15593,7 +15812,7 @@ func (x *Workflow_ReplicationLocation) String() string {
func (*Workflow_ReplicationLocation) ProtoMessage() {}
func (x *Workflow_ReplicationLocation) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[246]
+ mi := &file_vtctldata_proto_msgTypes[250]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -15636,7 +15855,7 @@ type Workflow_ShardStream struct {
func (x *Workflow_ShardStream) Reset() {
*x = Workflow_ShardStream{}
if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[247]
+ mi := &file_vtctldata_proto_msgTypes[251]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -15649,7 +15868,7 @@ func (x *Workflow_ShardStream) String() string {
func (*Workflow_ShardStream) ProtoMessage() {}
func (x *Workflow_ShardStream) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[247]
+ mi := &file_vtctldata_proto_msgTypes[251]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -15724,7 +15943,7 @@ type Workflow_Stream struct {
func (x *Workflow_Stream) Reset() {
*x = Workflow_Stream{}
if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[248]
+ mi := &file_vtctldata_proto_msgTypes[252]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -15737,7 +15956,7 @@ func (x *Workflow_Stream) String() string {
func (*Workflow_Stream) ProtoMessage() {}
func (x *Workflow_Stream) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[248]
+ mi := &file_vtctldata_proto_msgTypes[252]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -15906,7 +16125,7 @@ type Workflow_Stream_CopyState struct {
func (x *Workflow_Stream_CopyState) Reset() {
*x = Workflow_Stream_CopyState{}
if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[249]
+ mi := &file_vtctldata_proto_msgTypes[253]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -15919,7 +16138,7 @@ 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[249]
+ mi := &file_vtctldata_proto_msgTypes[253]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -15974,7 +16193,7 @@ type Workflow_Stream_Log struct {
func (x *Workflow_Stream_Log) Reset() {
*x = Workflow_Stream_Log{}
if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[250]
+ mi := &file_vtctldata_proto_msgTypes[254]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -15987,7 +16206,7 @@ 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[250]
+ mi := &file_vtctldata_proto_msgTypes[254]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -16071,7 +16290,7 @@ type Workflow_Stream_ThrottlerStatus struct {
func (x *Workflow_Stream_ThrottlerStatus) Reset() {
*x = Workflow_Stream_ThrottlerStatus{}
if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[251]
+ mi := &file_vtctldata_proto_msgTypes[255]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -16084,7 +16303,7 @@ 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[251]
+ mi := &file_vtctldata_proto_msgTypes[255]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -16125,7 +16344,7 @@ type ApplyVSchemaResponse_ParamList struct {
func (x *ApplyVSchemaResponse_ParamList) Reset() {
*x = ApplyVSchemaResponse_ParamList{}
if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[254]
+ mi := &file_vtctldata_proto_msgTypes[258]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -16138,7 +16357,7 @@ func (x *ApplyVSchemaResponse_ParamList) String() string {
func (*ApplyVSchemaResponse_ParamList) ProtoMessage() {}
func (x *ApplyVSchemaResponse_ParamList) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[254]
+ mi := &file_vtctldata_proto_msgTypes[258]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -16185,7 +16404,7 @@ type CheckThrottlerResponse_Metric struct {
func (x *CheckThrottlerResponse_Metric) Reset() {
*x = CheckThrottlerResponse_Metric{}
if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[256]
+ mi := &file_vtctldata_proto_msgTypes[260]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -16198,7 +16417,7 @@ func (x *CheckThrottlerResponse_Metric) String() string {
func (*CheckThrottlerResponse_Metric) ProtoMessage() {}
func (x *CheckThrottlerResponse_Metric) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[256]
+ mi := &file_vtctldata_proto_msgTypes[260]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -16274,7 +16493,7 @@ type GetSrvKeyspaceNamesResponse_NameList struct {
func (x *GetSrvKeyspaceNamesResponse_NameList) Reset() {
*x = GetSrvKeyspaceNamesResponse_NameList{}
if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[265]
+ mi := &file_vtctldata_proto_msgTypes[269]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -16287,7 +16506,7 @@ func (x *GetSrvKeyspaceNamesResponse_NameList) String() string {
func (*GetSrvKeyspaceNamesResponse_NameList) ProtoMessage() {}
func (x *GetSrvKeyspaceNamesResponse_NameList) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[265]
+ mi := &file_vtctldata_proto_msgTypes[269]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -16322,7 +16541,7 @@ type GetThrottlerStatusResponse_MetricResult struct {
func (x *GetThrottlerStatusResponse_MetricResult) Reset() {
*x = GetThrottlerStatusResponse_MetricResult{}
if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[268]
+ mi := &file_vtctldata_proto_msgTypes[272]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -16335,7 +16554,7 @@ func (x *GetThrottlerStatusResponse_MetricResult) String() string {
func (*GetThrottlerStatusResponse_MetricResult) ProtoMessage() {}
func (x *GetThrottlerStatusResponse_MetricResult) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[268]
+ mi := &file_vtctldata_proto_msgTypes[272]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -16377,7 +16596,7 @@ type GetThrottlerStatusResponse_MetricHealth struct {
func (x *GetThrottlerStatusResponse_MetricHealth) Reset() {
*x = GetThrottlerStatusResponse_MetricHealth{}
if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[271]
+ mi := &file_vtctldata_proto_msgTypes[275]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -16390,7 +16609,7 @@ func (x *GetThrottlerStatusResponse_MetricHealth) String() string {
func (*GetThrottlerStatusResponse_MetricHealth) ProtoMessage() {}
func (x *GetThrottlerStatusResponse_MetricHealth) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[271]
+ mi := &file_vtctldata_proto_msgTypes[275]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -16432,7 +16651,7 @@ type GetThrottlerStatusResponse_RecentApp struct {
func (x *GetThrottlerStatusResponse_RecentApp) Reset() {
*x = GetThrottlerStatusResponse_RecentApp{}
if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[275]
+ mi := &file_vtctldata_proto_msgTypes[279]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -16445,7 +16664,7 @@ func (x *GetThrottlerStatusResponse_RecentApp) String() string {
func (*GetThrottlerStatusResponse_RecentApp) ProtoMessage() {}
func (x *GetThrottlerStatusResponse_RecentApp) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[275]
+ mi := &file_vtctldata_proto_msgTypes[279]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -16488,7 +16707,7 @@ type MoveTablesCreateResponse_TabletInfo struct {
func (x *MoveTablesCreateResponse_TabletInfo) Reset() {
*x = MoveTablesCreateResponse_TabletInfo{}
if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[278]
+ mi := &file_vtctldata_proto_msgTypes[282]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -16501,7 +16720,7 @@ func (x *MoveTablesCreateResponse_TabletInfo) String() string {
func (*MoveTablesCreateResponse_TabletInfo) ProtoMessage() {}
func (x *MoveTablesCreateResponse_TabletInfo) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[278]
+ mi := &file_vtctldata_proto_msgTypes[282]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -16544,7 +16763,7 @@ type WorkflowDeleteResponse_TabletInfo struct {
func (x *WorkflowDeleteResponse_TabletInfo) Reset() {
*x = WorkflowDeleteResponse_TabletInfo{}
if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[288]
+ mi := &file_vtctldata_proto_msgTypes[292]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -16557,7 +16776,7 @@ func (x *WorkflowDeleteResponse_TabletInfo) String() string {
func (*WorkflowDeleteResponse_TabletInfo) ProtoMessage() {}
func (x *WorkflowDeleteResponse_TabletInfo) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[288]
+ mi := &file_vtctldata_proto_msgTypes[292]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -16603,7 +16822,7 @@ type WorkflowStatusResponse_TableCopyState struct {
func (x *WorkflowStatusResponse_TableCopyState) Reset() {
*x = WorkflowStatusResponse_TableCopyState{}
if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[289]
+ mi := &file_vtctldata_proto_msgTypes[293]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -16616,7 +16835,7 @@ func (x *WorkflowStatusResponse_TableCopyState) String() string {
func (*WorkflowStatusResponse_TableCopyState) ProtoMessage() {}
func (x *WorkflowStatusResponse_TableCopyState) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[289]
+ mi := &file_vtctldata_proto_msgTypes[293]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -16690,7 +16909,7 @@ type WorkflowStatusResponse_ShardStreamState struct {
func (x *WorkflowStatusResponse_ShardStreamState) Reset() {
*x = WorkflowStatusResponse_ShardStreamState{}
if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[290]
+ mi := &file_vtctldata_proto_msgTypes[294]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -16703,7 +16922,7 @@ func (x *WorkflowStatusResponse_ShardStreamState) String() string {
func (*WorkflowStatusResponse_ShardStreamState) ProtoMessage() {}
func (x *WorkflowStatusResponse_ShardStreamState) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[290]
+ mi := &file_vtctldata_proto_msgTypes[294]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -16772,7 +16991,7 @@ type WorkflowStatusResponse_ShardStreams struct {
func (x *WorkflowStatusResponse_ShardStreams) Reset() {
*x = WorkflowStatusResponse_ShardStreams{}
if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[291]
+ mi := &file_vtctldata_proto_msgTypes[295]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -16785,7 +17004,7 @@ func (x *WorkflowStatusResponse_ShardStreams) String() string {
func (*WorkflowStatusResponse_ShardStreams) ProtoMessage() {}
func (x *WorkflowStatusResponse_ShardStreams) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[291]
+ mi := &file_vtctldata_proto_msgTypes[295]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -16822,7 +17041,7 @@ type WorkflowUpdateResponse_TabletInfo struct {
func (x *WorkflowUpdateResponse_TabletInfo) Reset() {
*x = WorkflowUpdateResponse_TabletInfo{}
if protoimpl.UnsafeEnabled {
- mi := &file_vtctldata_proto_msgTypes[294]
+ mi := &file_vtctldata_proto_msgTypes[298]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -16835,7 +17054,7 @@ func (x *WorkflowUpdateResponse_TabletInfo) String() string {
func (*WorkflowUpdateResponse_TabletInfo) ProtoMessage() {}
func (x *WorkflowUpdateResponse_TabletInfo) ProtoReflect() protoreflect.Message {
- mi := &file_vtctldata_proto_msgTypes[294]
+ mi := &file_vtctldata_proto_msgTypes[298]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -19410,19 +19629,44 @@ var file_vtctldata_proto_rawDesc = []byte{
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, 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,
+ 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,
}
var (
@@ -19438,7 +19682,7 @@ func file_vtctldata_proto_rawDescGZIP() []byte {
}
var file_vtctldata_proto_enumTypes = make([]protoimpl.EnumInfo, 4)
-var file_vtctldata_proto_msgTypes = make([]protoimpl.MessageInfo, 295)
+var file_vtctldata_proto_msgTypes = make([]protoimpl.MessageInfo, 299)
var file_vtctldata_proto_goTypes = []any{
(MaterializationIntent)(0), // 0: vtctldata.MaterializationIntent
(QueryOrdering)(0), // 1: vtctldata.QueryOrdering
@@ -19689,335 +19933,342 @@ var file_vtctldata_proto_goTypes = []any{
(*WorkflowSwitchTrafficResponse)(nil), // 246: vtctldata.WorkflowSwitchTrafficResponse
(*WorkflowUpdateRequest)(nil), // 247: vtctldata.WorkflowUpdateRequest
(*WorkflowUpdateResponse)(nil), // 248: vtctldata.WorkflowUpdateResponse
- nil, // 249: vtctldata.Workflow.ShardStreamsEntry
- (*Workflow_ReplicationLocation)(nil), // 250: vtctldata.Workflow.ReplicationLocation
- (*Workflow_ShardStream)(nil), // 251: vtctldata.Workflow.ShardStream
- (*Workflow_Stream)(nil), // 252: vtctldata.Workflow.Stream
- (*Workflow_Stream_CopyState)(nil), // 253: vtctldata.Workflow.Stream.CopyState
- (*Workflow_Stream_Log)(nil), // 254: vtctldata.Workflow.Stream.Log
- (*Workflow_Stream_ThrottlerStatus)(nil), // 255: vtctldata.Workflow.Stream.ThrottlerStatus
- nil, // 256: vtctldata.ApplySchemaResponse.RowsAffectedByShardEntry
- nil, // 257: vtctldata.ApplyVSchemaResponse.UnknownVindexParamsEntry
- (*ApplyVSchemaResponse_ParamList)(nil), // 258: vtctldata.ApplyVSchemaResponse.ParamList
- nil, // 259: vtctldata.CancelSchemaMigrationResponse.RowsAffectedByShardEntry
- (*CheckThrottlerResponse_Metric)(nil), // 260: vtctldata.CheckThrottlerResponse.Metric
- nil, // 261: vtctldata.CheckThrottlerResponse.MetricsEntry
- nil, // 262: vtctldata.CleanupSchemaMigrationResponse.RowsAffectedByShardEntry
- nil, // 263: vtctldata.CompleteSchemaMigrationResponse.RowsAffectedByShardEntry
- nil, // 264: vtctldata.FindAllShardsInKeyspaceResponse.ShardsEntry
- nil, // 265: vtctldata.ForceCutOverSchemaMigrationResponse.RowsAffectedByShardEntry
- nil, // 266: vtctldata.GetCellsAliasesResponse.AliasesEntry
- nil, // 267: vtctldata.GetShardReplicationResponse.ShardReplicationByCellEntry
- nil, // 268: vtctldata.GetSrvKeyspaceNamesResponse.NamesEntry
- (*GetSrvKeyspaceNamesResponse_NameList)(nil), // 269: vtctldata.GetSrvKeyspaceNamesResponse.NameList
- nil, // 270: vtctldata.GetSrvKeyspacesResponse.SrvKeyspacesEntry
- nil, // 271: vtctldata.GetSrvVSchemasResponse.SrvVSchemasEntry
- (*GetThrottlerStatusResponse_MetricResult)(nil), // 272: vtctldata.GetThrottlerStatusResponse.MetricResult
- nil, // 273: vtctldata.GetThrottlerStatusResponse.AggregatedMetricsEntry
- nil, // 274: vtctldata.GetThrottlerStatusResponse.MetricThresholdsEntry
- (*GetThrottlerStatusResponse_MetricHealth)(nil), // 275: vtctldata.GetThrottlerStatusResponse.MetricHealth
- nil, // 276: vtctldata.GetThrottlerStatusResponse.MetricsHealthEntry
- nil, // 277: vtctldata.GetThrottlerStatusResponse.ThrottledAppsEntry
- nil, // 278: vtctldata.GetThrottlerStatusResponse.AppCheckedMetricsEntry
- (*GetThrottlerStatusResponse_RecentApp)(nil), // 279: vtctldata.GetThrottlerStatusResponse.RecentApp
- nil, // 280: vtctldata.GetThrottlerStatusResponse.RecentAppsEntry
- nil, // 281: vtctldata.LaunchSchemaMigrationResponse.RowsAffectedByShardEntry
- (*MoveTablesCreateResponse_TabletInfo)(nil), // 282: vtctldata.MoveTablesCreateResponse.TabletInfo
- nil, // 283: vtctldata.RetrySchemaMigrationResponse.RowsAffectedByShardEntry
- nil, // 284: vtctldata.ShardReplicationPositionsResponse.ReplicationStatusesEntry
- nil, // 285: vtctldata.ShardReplicationPositionsResponse.TabletMapEntry
- nil, // 286: vtctldata.ValidateResponse.ResultsByKeyspaceEntry
- nil, // 287: vtctldata.ValidateKeyspaceResponse.ResultsByShardEntry
- nil, // 288: vtctldata.ValidateSchemaKeyspaceResponse.ResultsByShardEntry
- nil, // 289: vtctldata.ValidateVersionKeyspaceResponse.ResultsByShardEntry
- nil, // 290: vtctldata.ValidateVSchemaResponse.ResultsByShardEntry
- nil, // 291: vtctldata.VDiffShowResponse.TabletResponsesEntry
- (*WorkflowDeleteResponse_TabletInfo)(nil), // 292: vtctldata.WorkflowDeleteResponse.TabletInfo
- (*WorkflowStatusResponse_TableCopyState)(nil), // 293: vtctldata.WorkflowStatusResponse.TableCopyState
- (*WorkflowStatusResponse_ShardStreamState)(nil), // 294: vtctldata.WorkflowStatusResponse.ShardStreamState
- (*WorkflowStatusResponse_ShardStreams)(nil), // 295: vtctldata.WorkflowStatusResponse.ShardStreams
- nil, // 296: vtctldata.WorkflowStatusResponse.TableCopyStateEntry
- nil, // 297: vtctldata.WorkflowStatusResponse.ShardStreamsEntry
- (*WorkflowUpdateResponse_TabletInfo)(nil), // 298: vtctldata.WorkflowUpdateResponse.TabletInfo
- (*logutil.Event)(nil), // 299: logutil.Event
- (tabletmanagerdata.TabletSelectionPreference)(0), // 300: tabletmanagerdata.TabletSelectionPreference
- (*topodata.Keyspace)(nil), // 301: topodata.Keyspace
- (*vttime.Time)(nil), // 302: vttime.Time
- (*topodata.TabletAlias)(nil), // 303: topodata.TabletAlias
- (*vttime.Duration)(nil), // 304: vttime.Duration
- (*topodata.Shard)(nil), // 305: topodata.Shard
- (*topodata.CellInfo)(nil), // 306: topodata.CellInfo
- (*vschema.KeyspaceRoutingRules)(nil), // 307: vschema.KeyspaceRoutingRules
- (*vschema.RoutingRules)(nil), // 308: vschema.RoutingRules
- (*vschema.ShardRoutingRules)(nil), // 309: vschema.ShardRoutingRules
- (*vtrpc.CallerID)(nil), // 310: vtrpc.CallerID
- (*vschema.Keyspace)(nil), // 311: vschema.Keyspace
- (topodata.TabletType)(0), // 312: topodata.TabletType
- (*topodata.Tablet)(nil), // 313: topodata.Tablet
- (topodata.KeyspaceType)(0), // 314: topodata.KeyspaceType
- (*query.QueryResult)(nil), // 315: query.QueryResult
- (*tabletmanagerdata.ExecuteHookRequest)(nil), // 316: tabletmanagerdata.ExecuteHookRequest
- (*tabletmanagerdata.ExecuteHookResponse)(nil), // 317: tabletmanagerdata.ExecuteHookResponse
- (*mysqlctl.BackupInfo)(nil), // 318: mysqlctl.BackupInfo
- (*replicationdata.FullStatus)(nil), // 319: replicationdata.FullStatus
- (*tabletmanagerdata.Permissions)(nil), // 320: tabletmanagerdata.Permissions
- (*tabletmanagerdata.SchemaDefinition)(nil), // 321: tabletmanagerdata.SchemaDefinition
- (*topodata.ThrottledAppRule)(nil), // 322: topodata.ThrottledAppRule
- (*vschema.SrvVSchema)(nil), // 323: vschema.SrvVSchema
- (*topodata.ShardReplicationError)(nil), // 324: topodata.ShardReplicationError
- (*topodata.KeyRange)(nil), // 325: topodata.KeyRange
- (*topodata.CellsAlias)(nil), // 326: topodata.CellsAlias
- (*tabletmanagerdata.UpdateVReplicationWorkflowRequest)(nil), // 327: tabletmanagerdata.UpdateVReplicationWorkflowRequest
- (*topodata.Shard_TabletControl)(nil), // 328: topodata.Shard.TabletControl
- (*binlogdata.BinlogSource)(nil), // 329: binlogdata.BinlogSource
- (*topodata.ShardReplication)(nil), // 330: topodata.ShardReplication
- (*topodata.SrvKeyspace)(nil), // 331: topodata.SrvKeyspace
- (*replicationdata.Status)(nil), // 332: replicationdata.Status
- (*tabletmanagerdata.VDiffResponse)(nil), // 333: tabletmanagerdata.VDiffResponse
+ (*GetMirrorRulesRequest)(nil), // 249: vtctldata.GetMirrorRulesRequest
+ (*GetMirrorRulesResponse)(nil), // 250: vtctldata.GetMirrorRulesResponse
+ (*WorkflowMirrorTrafficRequest)(nil), // 251: vtctldata.WorkflowMirrorTrafficRequest
+ (*WorkflowMirrorTrafficResponse)(nil), // 252: vtctldata.WorkflowMirrorTrafficResponse
+ nil, // 253: vtctldata.Workflow.ShardStreamsEntry
+ (*Workflow_ReplicationLocation)(nil), // 254: vtctldata.Workflow.ReplicationLocation
+ (*Workflow_ShardStream)(nil), // 255: vtctldata.Workflow.ShardStream
+ (*Workflow_Stream)(nil), // 256: vtctldata.Workflow.Stream
+ (*Workflow_Stream_CopyState)(nil), // 257: vtctldata.Workflow.Stream.CopyState
+ (*Workflow_Stream_Log)(nil), // 258: vtctldata.Workflow.Stream.Log
+ (*Workflow_Stream_ThrottlerStatus)(nil), // 259: vtctldata.Workflow.Stream.ThrottlerStatus
+ nil, // 260: vtctldata.ApplySchemaResponse.RowsAffectedByShardEntry
+ nil, // 261: vtctldata.ApplyVSchemaResponse.UnknownVindexParamsEntry
+ (*ApplyVSchemaResponse_ParamList)(nil), // 262: vtctldata.ApplyVSchemaResponse.ParamList
+ nil, // 263: vtctldata.CancelSchemaMigrationResponse.RowsAffectedByShardEntry
+ (*CheckThrottlerResponse_Metric)(nil), // 264: vtctldata.CheckThrottlerResponse.Metric
+ nil, // 265: vtctldata.CheckThrottlerResponse.MetricsEntry
+ nil, // 266: vtctldata.CleanupSchemaMigrationResponse.RowsAffectedByShardEntry
+ nil, // 267: vtctldata.CompleteSchemaMigrationResponse.RowsAffectedByShardEntry
+ nil, // 268: vtctldata.FindAllShardsInKeyspaceResponse.ShardsEntry
+ nil, // 269: vtctldata.ForceCutOverSchemaMigrationResponse.RowsAffectedByShardEntry
+ nil, // 270: vtctldata.GetCellsAliasesResponse.AliasesEntry
+ nil, // 271: vtctldata.GetShardReplicationResponse.ShardReplicationByCellEntry
+ nil, // 272: vtctldata.GetSrvKeyspaceNamesResponse.NamesEntry
+ (*GetSrvKeyspaceNamesResponse_NameList)(nil), // 273: vtctldata.GetSrvKeyspaceNamesResponse.NameList
+ nil, // 274: vtctldata.GetSrvKeyspacesResponse.SrvKeyspacesEntry
+ nil, // 275: vtctldata.GetSrvVSchemasResponse.SrvVSchemasEntry
+ (*GetThrottlerStatusResponse_MetricResult)(nil), // 276: vtctldata.GetThrottlerStatusResponse.MetricResult
+ nil, // 277: vtctldata.GetThrottlerStatusResponse.AggregatedMetricsEntry
+ nil, // 278: vtctldata.GetThrottlerStatusResponse.MetricThresholdsEntry
+ (*GetThrottlerStatusResponse_MetricHealth)(nil), // 279: vtctldata.GetThrottlerStatusResponse.MetricHealth
+ nil, // 280: vtctldata.GetThrottlerStatusResponse.MetricsHealthEntry
+ nil, // 281: vtctldata.GetThrottlerStatusResponse.ThrottledAppsEntry
+ nil, // 282: vtctldata.GetThrottlerStatusResponse.AppCheckedMetricsEntry
+ (*GetThrottlerStatusResponse_RecentApp)(nil), // 283: vtctldata.GetThrottlerStatusResponse.RecentApp
+ nil, // 284: vtctldata.GetThrottlerStatusResponse.RecentAppsEntry
+ nil, // 285: vtctldata.LaunchSchemaMigrationResponse.RowsAffectedByShardEntry
+ (*MoveTablesCreateResponse_TabletInfo)(nil), // 286: vtctldata.MoveTablesCreateResponse.TabletInfo
+ nil, // 287: vtctldata.RetrySchemaMigrationResponse.RowsAffectedByShardEntry
+ nil, // 288: vtctldata.ShardReplicationPositionsResponse.ReplicationStatusesEntry
+ nil, // 289: vtctldata.ShardReplicationPositionsResponse.TabletMapEntry
+ nil, // 290: vtctldata.ValidateResponse.ResultsByKeyspaceEntry
+ nil, // 291: vtctldata.ValidateKeyspaceResponse.ResultsByShardEntry
+ nil, // 292: vtctldata.ValidateSchemaKeyspaceResponse.ResultsByShardEntry
+ nil, // 293: vtctldata.ValidateVersionKeyspaceResponse.ResultsByShardEntry
+ nil, // 294: vtctldata.ValidateVSchemaResponse.ResultsByShardEntry
+ nil, // 295: vtctldata.VDiffShowResponse.TabletResponsesEntry
+ (*WorkflowDeleteResponse_TabletInfo)(nil), // 296: vtctldata.WorkflowDeleteResponse.TabletInfo
+ (*WorkflowStatusResponse_TableCopyState)(nil), // 297: vtctldata.WorkflowStatusResponse.TableCopyState
+ (*WorkflowStatusResponse_ShardStreamState)(nil), // 298: vtctldata.WorkflowStatusResponse.ShardStreamState
+ (*WorkflowStatusResponse_ShardStreams)(nil), // 299: vtctldata.WorkflowStatusResponse.ShardStreams
+ nil, // 300: vtctldata.WorkflowStatusResponse.TableCopyStateEntry
+ nil, // 301: vtctldata.WorkflowStatusResponse.ShardStreamsEntry
+ (*WorkflowUpdateResponse_TabletInfo)(nil), // 302: vtctldata.WorkflowUpdateResponse.TabletInfo
+ (*logutil.Event)(nil), // 303: logutil.Event
+ (tabletmanagerdata.TabletSelectionPreference)(0), // 304: tabletmanagerdata.TabletSelectionPreference
+ (*topodata.Keyspace)(nil), // 305: topodata.Keyspace
+ (*vttime.Time)(nil), // 306: vttime.Time
+ (*topodata.TabletAlias)(nil), // 307: topodata.TabletAlias
+ (*vttime.Duration)(nil), // 308: vttime.Duration
+ (*topodata.Shard)(nil), // 309: topodata.Shard
+ (*topodata.CellInfo)(nil), // 310: topodata.CellInfo
+ (*vschema.KeyspaceRoutingRules)(nil), // 311: vschema.KeyspaceRoutingRules
+ (*vschema.RoutingRules)(nil), // 312: vschema.RoutingRules
+ (*vschema.ShardRoutingRules)(nil), // 313: vschema.ShardRoutingRules
+ (*vtrpc.CallerID)(nil), // 314: vtrpc.CallerID
+ (*vschema.Keyspace)(nil), // 315: vschema.Keyspace
+ (topodata.TabletType)(0), // 316: topodata.TabletType
+ (*topodata.Tablet)(nil), // 317: topodata.Tablet
+ (topodata.KeyspaceType)(0), // 318: topodata.KeyspaceType
+ (*query.QueryResult)(nil), // 319: query.QueryResult
+ (*tabletmanagerdata.ExecuteHookRequest)(nil), // 320: tabletmanagerdata.ExecuteHookRequest
+ (*tabletmanagerdata.ExecuteHookResponse)(nil), // 321: tabletmanagerdata.ExecuteHookResponse
+ (*mysqlctl.BackupInfo)(nil), // 322: mysqlctl.BackupInfo
+ (*replicationdata.FullStatus)(nil), // 323: replicationdata.FullStatus
+ (*tabletmanagerdata.Permissions)(nil), // 324: tabletmanagerdata.Permissions
+ (*tabletmanagerdata.SchemaDefinition)(nil), // 325: tabletmanagerdata.SchemaDefinition
+ (*topodata.ThrottledAppRule)(nil), // 326: topodata.ThrottledAppRule
+ (*vschema.SrvVSchema)(nil), // 327: vschema.SrvVSchema
+ (*topodata.ShardReplicationError)(nil), // 328: topodata.ShardReplicationError
+ (*topodata.KeyRange)(nil), // 329: topodata.KeyRange
+ (*topodata.CellsAlias)(nil), // 330: topodata.CellsAlias
+ (*tabletmanagerdata.UpdateVReplicationWorkflowRequest)(nil), // 331: tabletmanagerdata.UpdateVReplicationWorkflowRequest
+ (*vschema.MirrorRules)(nil), // 332: vschema.MirrorRules
+ (*topodata.Shard_TabletControl)(nil), // 333: topodata.Shard.TabletControl
+ (*binlogdata.BinlogSource)(nil), // 334: binlogdata.BinlogSource
+ (*topodata.ShardReplication)(nil), // 335: topodata.ShardReplication
+ (*topodata.SrvKeyspace)(nil), // 336: topodata.SrvKeyspace
+ (*replicationdata.Status)(nil), // 337: replicationdata.Status
+ (*tabletmanagerdata.VDiffResponse)(nil), // 338: tabletmanagerdata.VDiffResponse
}
var file_vtctldata_proto_depIdxs = []int32{
- 299, // 0: vtctldata.ExecuteVtctlCommandResponse.event:type_name -> logutil.Event
+ 303, // 0: vtctldata.ExecuteVtctlCommandResponse.event:type_name -> logutil.Event
6, // 1: vtctldata.MaterializeSettings.table_settings:type_name -> vtctldata.TableMaterializeSettings
0, // 2: vtctldata.MaterializeSettings.materialization_intent:type_name -> vtctldata.MaterializationIntent
- 300, // 3: vtctldata.MaterializeSettings.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
+ 304, // 3: vtctldata.MaterializeSettings.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
11, // 4: vtctldata.MaterializeSettings.workflow_options:type_name -> vtctldata.WorkflowOptions
- 301, // 5: vtctldata.Keyspace.keyspace:type_name -> topodata.Keyspace
+ 305, // 5: vtctldata.Keyspace.keyspace:type_name -> topodata.Keyspace
2, // 6: vtctldata.SchemaMigration.strategy:type_name -> vtctldata.SchemaMigration.Strategy
- 302, // 7: vtctldata.SchemaMigration.added_at:type_name -> vttime.Time
- 302, // 8: vtctldata.SchemaMigration.requested_at:type_name -> vttime.Time
- 302, // 9: vtctldata.SchemaMigration.ready_at:type_name -> vttime.Time
- 302, // 10: vtctldata.SchemaMigration.started_at:type_name -> vttime.Time
- 302, // 11: vtctldata.SchemaMigration.liveness_timestamp:type_name -> vttime.Time
- 302, // 12: vtctldata.SchemaMigration.completed_at:type_name -> vttime.Time
- 302, // 13: vtctldata.SchemaMigration.cleaned_up_at:type_name -> vttime.Time
+ 306, // 7: vtctldata.SchemaMigration.added_at:type_name -> vttime.Time
+ 306, // 8: vtctldata.SchemaMigration.requested_at:type_name -> vttime.Time
+ 306, // 9: vtctldata.SchemaMigration.ready_at:type_name -> vttime.Time
+ 306, // 10: vtctldata.SchemaMigration.started_at:type_name -> vttime.Time
+ 306, // 11: vtctldata.SchemaMigration.liveness_timestamp:type_name -> vttime.Time
+ 306, // 12: vtctldata.SchemaMigration.completed_at:type_name -> vttime.Time
+ 306, // 13: vtctldata.SchemaMigration.cleaned_up_at:type_name -> vttime.Time
3, // 14: vtctldata.SchemaMigration.status:type_name -> vtctldata.SchemaMigration.Status
- 303, // 15: vtctldata.SchemaMigration.tablet:type_name -> topodata.TabletAlias
- 304, // 16: vtctldata.SchemaMigration.artifact_retention:type_name -> vttime.Duration
- 302, // 17: vtctldata.SchemaMigration.last_throttled_at:type_name -> vttime.Time
- 302, // 18: vtctldata.SchemaMigration.cancelled_at:type_name -> vttime.Time
- 302, // 19: vtctldata.SchemaMigration.reviewed_at:type_name -> vttime.Time
- 302, // 20: vtctldata.SchemaMigration.ready_to_complete_at:type_name -> vttime.Time
- 305, // 21: vtctldata.Shard.shard:type_name -> topodata.Shard
- 250, // 22: vtctldata.Workflow.source:type_name -> vtctldata.Workflow.ReplicationLocation
- 250, // 23: vtctldata.Workflow.target:type_name -> vtctldata.Workflow.ReplicationLocation
- 249, // 24: vtctldata.Workflow.shard_streams:type_name -> vtctldata.Workflow.ShardStreamsEntry
+ 307, // 15: vtctldata.SchemaMigration.tablet:type_name -> topodata.TabletAlias
+ 308, // 16: vtctldata.SchemaMigration.artifact_retention:type_name -> vttime.Duration
+ 306, // 17: vtctldata.SchemaMigration.last_throttled_at:type_name -> vttime.Time
+ 306, // 18: vtctldata.SchemaMigration.cancelled_at:type_name -> vttime.Time
+ 306, // 19: vtctldata.SchemaMigration.reviewed_at:type_name -> vttime.Time
+ 306, // 20: vtctldata.SchemaMigration.ready_to_complete_at:type_name -> vttime.Time
+ 309, // 21: vtctldata.Shard.shard:type_name -> topodata.Shard
+ 254, // 22: vtctldata.Workflow.source:type_name -> vtctldata.Workflow.ReplicationLocation
+ 254, // 23: vtctldata.Workflow.target:type_name -> vtctldata.Workflow.ReplicationLocation
+ 253, // 24: vtctldata.Workflow.shard_streams:type_name -> vtctldata.Workflow.ShardStreamsEntry
11, // 25: vtctldata.Workflow.options:type_name -> vtctldata.WorkflowOptions
- 306, // 26: vtctldata.AddCellInfoRequest.cell_info:type_name -> topodata.CellInfo
- 307, // 27: vtctldata.ApplyKeyspaceRoutingRulesRequest.keyspace_routing_rules:type_name -> vschema.KeyspaceRoutingRules
- 307, // 28: vtctldata.ApplyKeyspaceRoutingRulesResponse.keyspace_routing_rules:type_name -> vschema.KeyspaceRoutingRules
- 308, // 29: vtctldata.ApplyRoutingRulesRequest.routing_rules:type_name -> vschema.RoutingRules
- 309, // 30: vtctldata.ApplyShardRoutingRulesRequest.shard_routing_rules:type_name -> vschema.ShardRoutingRules
- 304, // 31: vtctldata.ApplySchemaRequest.wait_replicas_timeout:type_name -> vttime.Duration
- 310, // 32: vtctldata.ApplySchemaRequest.caller_id:type_name -> vtrpc.CallerID
- 256, // 33: vtctldata.ApplySchemaResponse.rows_affected_by_shard:type_name -> vtctldata.ApplySchemaResponse.RowsAffectedByShardEntry
- 311, // 34: vtctldata.ApplyVSchemaRequest.v_schema:type_name -> vschema.Keyspace
- 311, // 35: vtctldata.ApplyVSchemaResponse.v_schema:type_name -> vschema.Keyspace
- 257, // 36: vtctldata.ApplyVSchemaResponse.unknown_vindex_params:type_name -> vtctldata.ApplyVSchemaResponse.UnknownVindexParamsEntry
- 303, // 37: vtctldata.BackupRequest.tablet_alias:type_name -> topodata.TabletAlias
- 303, // 38: vtctldata.BackupResponse.tablet_alias:type_name -> topodata.TabletAlias
- 299, // 39: vtctldata.BackupResponse.event:type_name -> logutil.Event
- 259, // 40: vtctldata.CancelSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.CancelSchemaMigrationResponse.RowsAffectedByShardEntry
- 303, // 41: vtctldata.ChangeTabletTypeRequest.tablet_alias:type_name -> topodata.TabletAlias
- 312, // 42: vtctldata.ChangeTabletTypeRequest.db_type:type_name -> topodata.TabletType
- 313, // 43: vtctldata.ChangeTabletTypeResponse.before_tablet:type_name -> topodata.Tablet
- 313, // 44: vtctldata.ChangeTabletTypeResponse.after_tablet:type_name -> topodata.Tablet
- 303, // 45: vtctldata.CheckThrottlerRequest.tablet_alias:type_name -> topodata.TabletAlias
- 261, // 46: vtctldata.CheckThrottlerResponse.metrics:type_name -> vtctldata.CheckThrottlerResponse.MetricsEntry
- 262, // 47: vtctldata.CleanupSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.CleanupSchemaMigrationResponse.RowsAffectedByShardEntry
- 263, // 48: vtctldata.CompleteSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.CompleteSchemaMigrationResponse.RowsAffectedByShardEntry
- 314, // 49: vtctldata.CreateKeyspaceRequest.type:type_name -> topodata.KeyspaceType
- 302, // 50: vtctldata.CreateKeyspaceRequest.snapshot_time:type_name -> vttime.Time
+ 310, // 26: vtctldata.AddCellInfoRequest.cell_info:type_name -> topodata.CellInfo
+ 311, // 27: vtctldata.ApplyKeyspaceRoutingRulesRequest.keyspace_routing_rules:type_name -> vschema.KeyspaceRoutingRules
+ 311, // 28: vtctldata.ApplyKeyspaceRoutingRulesResponse.keyspace_routing_rules:type_name -> vschema.KeyspaceRoutingRules
+ 312, // 29: vtctldata.ApplyRoutingRulesRequest.routing_rules:type_name -> vschema.RoutingRules
+ 313, // 30: vtctldata.ApplyShardRoutingRulesRequest.shard_routing_rules:type_name -> vschema.ShardRoutingRules
+ 308, // 31: vtctldata.ApplySchemaRequest.wait_replicas_timeout:type_name -> vttime.Duration
+ 314, // 32: vtctldata.ApplySchemaRequest.caller_id:type_name -> vtrpc.CallerID
+ 260, // 33: vtctldata.ApplySchemaResponse.rows_affected_by_shard:type_name -> vtctldata.ApplySchemaResponse.RowsAffectedByShardEntry
+ 315, // 34: vtctldata.ApplyVSchemaRequest.v_schema:type_name -> vschema.Keyspace
+ 315, // 35: vtctldata.ApplyVSchemaResponse.v_schema:type_name -> vschema.Keyspace
+ 261, // 36: vtctldata.ApplyVSchemaResponse.unknown_vindex_params:type_name -> vtctldata.ApplyVSchemaResponse.UnknownVindexParamsEntry
+ 307, // 37: vtctldata.BackupRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 307, // 38: vtctldata.BackupResponse.tablet_alias:type_name -> topodata.TabletAlias
+ 303, // 39: vtctldata.BackupResponse.event:type_name -> logutil.Event
+ 263, // 40: vtctldata.CancelSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.CancelSchemaMigrationResponse.RowsAffectedByShardEntry
+ 307, // 41: vtctldata.ChangeTabletTypeRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 316, // 42: vtctldata.ChangeTabletTypeRequest.db_type:type_name -> topodata.TabletType
+ 317, // 43: vtctldata.ChangeTabletTypeResponse.before_tablet:type_name -> topodata.Tablet
+ 317, // 44: vtctldata.ChangeTabletTypeResponse.after_tablet:type_name -> topodata.Tablet
+ 307, // 45: vtctldata.CheckThrottlerRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 265, // 46: vtctldata.CheckThrottlerResponse.metrics:type_name -> vtctldata.CheckThrottlerResponse.MetricsEntry
+ 266, // 47: vtctldata.CleanupSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.CleanupSchemaMigrationResponse.RowsAffectedByShardEntry
+ 267, // 48: vtctldata.CompleteSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.CompleteSchemaMigrationResponse.RowsAffectedByShardEntry
+ 318, // 49: vtctldata.CreateKeyspaceRequest.type:type_name -> topodata.KeyspaceType
+ 306, // 50: vtctldata.CreateKeyspaceRequest.snapshot_time:type_name -> vttime.Time
8, // 51: vtctldata.CreateKeyspaceResponse.keyspace:type_name -> vtctldata.Keyspace
8, // 52: vtctldata.CreateShardResponse.keyspace:type_name -> vtctldata.Keyspace
10, // 53: vtctldata.CreateShardResponse.shard:type_name -> vtctldata.Shard
10, // 54: vtctldata.DeleteShardsRequest.shards:type_name -> vtctldata.Shard
- 303, // 55: vtctldata.DeleteTabletsRequest.tablet_aliases:type_name -> topodata.TabletAlias
- 303, // 56: vtctldata.EmergencyReparentShardRequest.new_primary:type_name -> topodata.TabletAlias
- 303, // 57: vtctldata.EmergencyReparentShardRequest.ignore_replicas:type_name -> topodata.TabletAlias
- 304, // 58: vtctldata.EmergencyReparentShardRequest.wait_replicas_timeout:type_name -> vttime.Duration
- 303, // 59: vtctldata.EmergencyReparentShardResponse.promoted_primary:type_name -> topodata.TabletAlias
- 299, // 60: vtctldata.EmergencyReparentShardResponse.events:type_name -> logutil.Event
- 303, // 61: vtctldata.ExecuteFetchAsAppRequest.tablet_alias:type_name -> topodata.TabletAlias
- 315, // 62: vtctldata.ExecuteFetchAsAppResponse.result:type_name -> query.QueryResult
- 303, // 63: vtctldata.ExecuteFetchAsDBARequest.tablet_alias:type_name -> topodata.TabletAlias
- 315, // 64: vtctldata.ExecuteFetchAsDBAResponse.result:type_name -> query.QueryResult
- 303, // 65: vtctldata.ExecuteHookRequest.tablet_alias:type_name -> topodata.TabletAlias
- 316, // 66: vtctldata.ExecuteHookRequest.tablet_hook_request:type_name -> tabletmanagerdata.ExecuteHookRequest
- 317, // 67: vtctldata.ExecuteHookResponse.hook_result:type_name -> tabletmanagerdata.ExecuteHookResponse
- 303, // 68: vtctldata.ExecuteMultiFetchAsDBARequest.tablet_alias:type_name -> topodata.TabletAlias
- 315, // 69: vtctldata.ExecuteMultiFetchAsDBAResponse.results:type_name -> query.QueryResult
- 264, // 70: vtctldata.FindAllShardsInKeyspaceResponse.shards:type_name -> vtctldata.FindAllShardsInKeyspaceResponse.ShardsEntry
- 265, // 71: vtctldata.ForceCutOverSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.ForceCutOverSchemaMigrationResponse.RowsAffectedByShardEntry
- 318, // 72: vtctldata.GetBackupsResponse.backups:type_name -> mysqlctl.BackupInfo
- 306, // 73: vtctldata.GetCellInfoResponse.cell_info:type_name -> topodata.CellInfo
- 266, // 74: vtctldata.GetCellsAliasesResponse.aliases:type_name -> vtctldata.GetCellsAliasesResponse.AliasesEntry
- 303, // 75: vtctldata.GetFullStatusRequest.tablet_alias:type_name -> topodata.TabletAlias
- 319, // 76: vtctldata.GetFullStatusResponse.status:type_name -> replicationdata.FullStatus
+ 307, // 55: vtctldata.DeleteTabletsRequest.tablet_aliases:type_name -> topodata.TabletAlias
+ 307, // 56: vtctldata.EmergencyReparentShardRequest.new_primary:type_name -> topodata.TabletAlias
+ 307, // 57: vtctldata.EmergencyReparentShardRequest.ignore_replicas:type_name -> topodata.TabletAlias
+ 308, // 58: vtctldata.EmergencyReparentShardRequest.wait_replicas_timeout:type_name -> vttime.Duration
+ 307, // 59: vtctldata.EmergencyReparentShardResponse.promoted_primary:type_name -> topodata.TabletAlias
+ 303, // 60: vtctldata.EmergencyReparentShardResponse.events:type_name -> logutil.Event
+ 307, // 61: vtctldata.ExecuteFetchAsAppRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 319, // 62: vtctldata.ExecuteFetchAsAppResponse.result:type_name -> query.QueryResult
+ 307, // 63: vtctldata.ExecuteFetchAsDBARequest.tablet_alias:type_name -> topodata.TabletAlias
+ 319, // 64: vtctldata.ExecuteFetchAsDBAResponse.result:type_name -> query.QueryResult
+ 307, // 65: vtctldata.ExecuteHookRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 320, // 66: vtctldata.ExecuteHookRequest.tablet_hook_request:type_name -> tabletmanagerdata.ExecuteHookRequest
+ 321, // 67: vtctldata.ExecuteHookResponse.hook_result:type_name -> tabletmanagerdata.ExecuteHookResponse
+ 307, // 68: vtctldata.ExecuteMultiFetchAsDBARequest.tablet_alias:type_name -> topodata.TabletAlias
+ 319, // 69: vtctldata.ExecuteMultiFetchAsDBAResponse.results:type_name -> query.QueryResult
+ 268, // 70: vtctldata.FindAllShardsInKeyspaceResponse.shards:type_name -> vtctldata.FindAllShardsInKeyspaceResponse.ShardsEntry
+ 269, // 71: vtctldata.ForceCutOverSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.ForceCutOverSchemaMigrationResponse.RowsAffectedByShardEntry
+ 322, // 72: vtctldata.GetBackupsResponse.backups:type_name -> mysqlctl.BackupInfo
+ 310, // 73: vtctldata.GetCellInfoResponse.cell_info:type_name -> topodata.CellInfo
+ 270, // 74: vtctldata.GetCellsAliasesResponse.aliases:type_name -> vtctldata.GetCellsAliasesResponse.AliasesEntry
+ 307, // 75: vtctldata.GetFullStatusRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 323, // 76: vtctldata.GetFullStatusResponse.status:type_name -> replicationdata.FullStatus
8, // 77: vtctldata.GetKeyspacesResponse.keyspaces:type_name -> vtctldata.Keyspace
8, // 78: vtctldata.GetKeyspaceResponse.keyspace:type_name -> vtctldata.Keyspace
- 303, // 79: vtctldata.GetPermissionsRequest.tablet_alias:type_name -> topodata.TabletAlias
- 320, // 80: vtctldata.GetPermissionsResponse.permissions:type_name -> tabletmanagerdata.Permissions
- 307, // 81: vtctldata.GetKeyspaceRoutingRulesResponse.keyspace_routing_rules:type_name -> vschema.KeyspaceRoutingRules
- 308, // 82: vtctldata.GetRoutingRulesResponse.routing_rules:type_name -> vschema.RoutingRules
- 303, // 83: vtctldata.GetSchemaRequest.tablet_alias:type_name -> topodata.TabletAlias
- 321, // 84: vtctldata.GetSchemaResponse.schema:type_name -> tabletmanagerdata.SchemaDefinition
+ 307, // 79: vtctldata.GetPermissionsRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 324, // 80: vtctldata.GetPermissionsResponse.permissions:type_name -> tabletmanagerdata.Permissions
+ 311, // 81: vtctldata.GetKeyspaceRoutingRulesResponse.keyspace_routing_rules:type_name -> vschema.KeyspaceRoutingRules
+ 312, // 82: vtctldata.GetRoutingRulesResponse.routing_rules:type_name -> vschema.RoutingRules
+ 307, // 83: vtctldata.GetSchemaRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 325, // 84: vtctldata.GetSchemaResponse.schema:type_name -> tabletmanagerdata.SchemaDefinition
3, // 85: vtctldata.GetSchemaMigrationsRequest.status:type_name -> vtctldata.SchemaMigration.Status
- 304, // 86: vtctldata.GetSchemaMigrationsRequest.recent:type_name -> vttime.Duration
+ 308, // 86: vtctldata.GetSchemaMigrationsRequest.recent:type_name -> vttime.Duration
1, // 87: vtctldata.GetSchemaMigrationsRequest.order:type_name -> vtctldata.QueryOrdering
9, // 88: vtctldata.GetSchemaMigrationsResponse.migrations:type_name -> vtctldata.SchemaMigration
- 267, // 89: vtctldata.GetShardReplicationResponse.shard_replication_by_cell:type_name -> vtctldata.GetShardReplicationResponse.ShardReplicationByCellEntry
+ 271, // 89: vtctldata.GetShardReplicationResponse.shard_replication_by_cell:type_name -> vtctldata.GetShardReplicationResponse.ShardReplicationByCellEntry
10, // 90: vtctldata.GetShardResponse.shard:type_name -> vtctldata.Shard
- 309, // 91: vtctldata.GetShardRoutingRulesResponse.shard_routing_rules:type_name -> vschema.ShardRoutingRules
- 268, // 92: vtctldata.GetSrvKeyspaceNamesResponse.names:type_name -> vtctldata.GetSrvKeyspaceNamesResponse.NamesEntry
- 270, // 93: vtctldata.GetSrvKeyspacesResponse.srv_keyspaces:type_name -> vtctldata.GetSrvKeyspacesResponse.SrvKeyspacesEntry
- 322, // 94: vtctldata.UpdateThrottlerConfigRequest.throttled_app:type_name -> topodata.ThrottledAppRule
- 323, // 95: vtctldata.GetSrvVSchemaResponse.srv_v_schema:type_name -> vschema.SrvVSchema
- 271, // 96: vtctldata.GetSrvVSchemasResponse.srv_v_schemas:type_name -> vtctldata.GetSrvVSchemasResponse.SrvVSchemasEntry
- 303, // 97: vtctldata.GetTabletRequest.tablet_alias:type_name -> topodata.TabletAlias
- 313, // 98: vtctldata.GetTabletResponse.tablet:type_name -> topodata.Tablet
- 303, // 99: vtctldata.GetTabletsRequest.tablet_aliases:type_name -> topodata.TabletAlias
- 312, // 100: vtctldata.GetTabletsRequest.tablet_type:type_name -> topodata.TabletType
- 313, // 101: vtctldata.GetTabletsResponse.tablets:type_name -> topodata.Tablet
- 303, // 102: vtctldata.GetThrottlerStatusRequest.tablet_alias:type_name -> topodata.TabletAlias
- 273, // 103: vtctldata.GetThrottlerStatusResponse.aggregated_metrics:type_name -> vtctldata.GetThrottlerStatusResponse.AggregatedMetricsEntry
- 274, // 104: vtctldata.GetThrottlerStatusResponse.metric_thresholds:type_name -> vtctldata.GetThrottlerStatusResponse.MetricThresholdsEntry
- 276, // 105: vtctldata.GetThrottlerStatusResponse.metrics_health:type_name -> vtctldata.GetThrottlerStatusResponse.MetricsHealthEntry
- 277, // 106: vtctldata.GetThrottlerStatusResponse.throttled_apps:type_name -> vtctldata.GetThrottlerStatusResponse.ThrottledAppsEntry
- 278, // 107: vtctldata.GetThrottlerStatusResponse.app_checked_metrics:type_name -> vtctldata.GetThrottlerStatusResponse.AppCheckedMetricsEntry
- 280, // 108: vtctldata.GetThrottlerStatusResponse.recent_apps:type_name -> vtctldata.GetThrottlerStatusResponse.RecentAppsEntry
+ 313, // 91: vtctldata.GetShardRoutingRulesResponse.shard_routing_rules:type_name -> vschema.ShardRoutingRules
+ 272, // 92: vtctldata.GetSrvKeyspaceNamesResponse.names:type_name -> vtctldata.GetSrvKeyspaceNamesResponse.NamesEntry
+ 274, // 93: vtctldata.GetSrvKeyspacesResponse.srv_keyspaces:type_name -> vtctldata.GetSrvKeyspacesResponse.SrvKeyspacesEntry
+ 326, // 94: vtctldata.UpdateThrottlerConfigRequest.throttled_app:type_name -> topodata.ThrottledAppRule
+ 327, // 95: vtctldata.GetSrvVSchemaResponse.srv_v_schema:type_name -> vschema.SrvVSchema
+ 275, // 96: vtctldata.GetSrvVSchemasResponse.srv_v_schemas:type_name -> vtctldata.GetSrvVSchemasResponse.SrvVSchemasEntry
+ 307, // 97: vtctldata.GetTabletRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 317, // 98: vtctldata.GetTabletResponse.tablet:type_name -> topodata.Tablet
+ 307, // 99: vtctldata.GetTabletsRequest.tablet_aliases:type_name -> topodata.TabletAlias
+ 316, // 100: vtctldata.GetTabletsRequest.tablet_type:type_name -> topodata.TabletType
+ 317, // 101: vtctldata.GetTabletsResponse.tablets:type_name -> topodata.Tablet
+ 307, // 102: vtctldata.GetThrottlerStatusRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 277, // 103: vtctldata.GetThrottlerStatusResponse.aggregated_metrics:type_name -> vtctldata.GetThrottlerStatusResponse.AggregatedMetricsEntry
+ 278, // 104: vtctldata.GetThrottlerStatusResponse.metric_thresholds:type_name -> vtctldata.GetThrottlerStatusResponse.MetricThresholdsEntry
+ 280, // 105: vtctldata.GetThrottlerStatusResponse.metrics_health:type_name -> vtctldata.GetThrottlerStatusResponse.MetricsHealthEntry
+ 281, // 106: vtctldata.GetThrottlerStatusResponse.throttled_apps:type_name -> vtctldata.GetThrottlerStatusResponse.ThrottledAppsEntry
+ 282, // 107: vtctldata.GetThrottlerStatusResponse.app_checked_metrics:type_name -> vtctldata.GetThrottlerStatusResponse.AppCheckedMetricsEntry
+ 284, // 108: vtctldata.GetThrottlerStatusResponse.recent_apps:type_name -> vtctldata.GetThrottlerStatusResponse.RecentAppsEntry
118, // 109: vtctldata.GetTopologyPathResponse.cell:type_name -> vtctldata.TopologyCell
- 303, // 110: vtctldata.GetVersionRequest.tablet_alias:type_name -> topodata.TabletAlias
- 311, // 111: vtctldata.GetVSchemaResponse.v_schema:type_name -> vschema.Keyspace
+ 307, // 110: vtctldata.GetVersionRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 315, // 111: vtctldata.GetVSchemaResponse.v_schema:type_name -> vschema.Keyspace
12, // 112: vtctldata.GetWorkflowsResponse.workflows:type_name -> vtctldata.Workflow
- 303, // 113: vtctldata.InitShardPrimaryRequest.primary_elect_tablet_alias:type_name -> topodata.TabletAlias
- 304, // 114: vtctldata.InitShardPrimaryRequest.wait_replicas_timeout:type_name -> vttime.Duration
- 299, // 115: vtctldata.InitShardPrimaryResponse.events:type_name -> logutil.Event
- 281, // 116: vtctldata.LaunchSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.LaunchSchemaMigrationResponse.RowsAffectedByShardEntry
- 311, // 117: vtctldata.LookupVindexCreateRequest.vindex:type_name -> vschema.Keyspace
- 312, // 118: vtctldata.LookupVindexCreateRequest.tablet_types:type_name -> topodata.TabletType
- 300, // 119: vtctldata.LookupVindexCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
+ 307, // 113: vtctldata.InitShardPrimaryRequest.primary_elect_tablet_alias:type_name -> topodata.TabletAlias
+ 308, // 114: vtctldata.InitShardPrimaryRequest.wait_replicas_timeout:type_name -> vttime.Duration
+ 303, // 115: vtctldata.InitShardPrimaryResponse.events:type_name -> logutil.Event
+ 285, // 116: vtctldata.LaunchSchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.LaunchSchemaMigrationResponse.RowsAffectedByShardEntry
+ 315, // 117: vtctldata.LookupVindexCreateRequest.vindex:type_name -> vschema.Keyspace
+ 316, // 118: vtctldata.LookupVindexCreateRequest.tablet_types:type_name -> topodata.TabletType
+ 304, // 119: vtctldata.LookupVindexCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
7, // 120: vtctldata.MaterializeCreateRequest.settings:type_name -> vtctldata.MaterializeSettings
- 312, // 121: vtctldata.MigrateCreateRequest.tablet_types:type_name -> topodata.TabletType
- 300, // 122: vtctldata.MigrateCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
- 312, // 123: vtctldata.MoveTablesCreateRequest.tablet_types:type_name -> topodata.TabletType
- 300, // 124: vtctldata.MoveTablesCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
+ 316, // 121: vtctldata.MigrateCreateRequest.tablet_types:type_name -> topodata.TabletType
+ 304, // 122: vtctldata.MigrateCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
+ 316, // 123: vtctldata.MoveTablesCreateRequest.tablet_types:type_name -> topodata.TabletType
+ 304, // 124: vtctldata.MoveTablesCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
11, // 125: vtctldata.MoveTablesCreateRequest.workflow_options:type_name -> vtctldata.WorkflowOptions
- 282, // 126: vtctldata.MoveTablesCreateResponse.details:type_name -> vtctldata.MoveTablesCreateResponse.TabletInfo
- 303, // 127: vtctldata.PingTabletRequest.tablet_alias:type_name -> topodata.TabletAlias
- 303, // 128: vtctldata.PlannedReparentShardRequest.new_primary:type_name -> topodata.TabletAlias
- 303, // 129: vtctldata.PlannedReparentShardRequest.avoid_primary:type_name -> topodata.TabletAlias
- 304, // 130: vtctldata.PlannedReparentShardRequest.wait_replicas_timeout:type_name -> vttime.Duration
- 304, // 131: vtctldata.PlannedReparentShardRequest.tolerable_replication_lag:type_name -> vttime.Duration
- 303, // 132: vtctldata.PlannedReparentShardResponse.promoted_primary:type_name -> topodata.TabletAlias
- 299, // 133: vtctldata.PlannedReparentShardResponse.events:type_name -> logutil.Event
- 303, // 134: vtctldata.RefreshStateRequest.tablet_alias:type_name -> topodata.TabletAlias
- 303, // 135: vtctldata.ReloadSchemaRequest.tablet_alias:type_name -> topodata.TabletAlias
- 299, // 136: vtctldata.ReloadSchemaKeyspaceResponse.events:type_name -> logutil.Event
- 299, // 137: vtctldata.ReloadSchemaShardResponse.events:type_name -> logutil.Event
- 303, // 138: vtctldata.ReparentTabletRequest.tablet:type_name -> topodata.TabletAlias
- 303, // 139: vtctldata.ReparentTabletResponse.primary:type_name -> topodata.TabletAlias
- 312, // 140: vtctldata.ReshardCreateRequest.tablet_types:type_name -> topodata.TabletType
- 300, // 141: vtctldata.ReshardCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
- 303, // 142: vtctldata.RestoreFromBackupRequest.tablet_alias:type_name -> topodata.TabletAlias
- 302, // 143: vtctldata.RestoreFromBackupRequest.backup_time:type_name -> vttime.Time
- 302, // 144: vtctldata.RestoreFromBackupRequest.restore_to_timestamp:type_name -> vttime.Time
- 303, // 145: vtctldata.RestoreFromBackupResponse.tablet_alias:type_name -> topodata.TabletAlias
- 299, // 146: vtctldata.RestoreFromBackupResponse.event:type_name -> logutil.Event
- 283, // 147: vtctldata.RetrySchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.RetrySchemaMigrationResponse.RowsAffectedByShardEntry
- 303, // 148: vtctldata.RunHealthCheckRequest.tablet_alias:type_name -> topodata.TabletAlias
- 301, // 149: vtctldata.SetKeyspaceDurabilityPolicyResponse.keyspace:type_name -> topodata.Keyspace
- 301, // 150: vtctldata.SetKeyspaceShardingInfoResponse.keyspace:type_name -> topodata.Keyspace
- 305, // 151: vtctldata.SetShardIsPrimaryServingResponse.shard:type_name -> topodata.Shard
- 312, // 152: vtctldata.SetShardTabletControlRequest.tablet_type:type_name -> topodata.TabletType
- 305, // 153: vtctldata.SetShardTabletControlResponse.shard:type_name -> topodata.Shard
- 303, // 154: vtctldata.SetWritableRequest.tablet_alias:type_name -> topodata.TabletAlias
- 303, // 155: vtctldata.ShardReplicationAddRequest.tablet_alias:type_name -> topodata.TabletAlias
- 324, // 156: vtctldata.ShardReplicationFixResponse.error:type_name -> topodata.ShardReplicationError
- 284, // 157: vtctldata.ShardReplicationPositionsResponse.replication_statuses:type_name -> vtctldata.ShardReplicationPositionsResponse.ReplicationStatusesEntry
- 285, // 158: vtctldata.ShardReplicationPositionsResponse.tablet_map:type_name -> vtctldata.ShardReplicationPositionsResponse.TabletMapEntry
- 303, // 159: vtctldata.ShardReplicationRemoveRequest.tablet_alias:type_name -> topodata.TabletAlias
- 303, // 160: vtctldata.SleepTabletRequest.tablet_alias:type_name -> topodata.TabletAlias
- 304, // 161: vtctldata.SleepTabletRequest.duration:type_name -> vttime.Duration
- 325, // 162: vtctldata.SourceShardAddRequest.key_range:type_name -> topodata.KeyRange
- 305, // 163: vtctldata.SourceShardAddResponse.shard:type_name -> topodata.Shard
- 305, // 164: vtctldata.SourceShardDeleteResponse.shard:type_name -> topodata.Shard
- 303, // 165: vtctldata.StartReplicationRequest.tablet_alias:type_name -> topodata.TabletAlias
- 303, // 166: vtctldata.StopReplicationRequest.tablet_alias:type_name -> topodata.TabletAlias
- 303, // 167: vtctldata.TabletExternallyReparentedRequest.tablet:type_name -> topodata.TabletAlias
- 303, // 168: vtctldata.TabletExternallyReparentedResponse.new_primary:type_name -> topodata.TabletAlias
- 303, // 169: vtctldata.TabletExternallyReparentedResponse.old_primary:type_name -> topodata.TabletAlias
- 306, // 170: vtctldata.UpdateCellInfoRequest.cell_info:type_name -> topodata.CellInfo
- 306, // 171: vtctldata.UpdateCellInfoResponse.cell_info:type_name -> topodata.CellInfo
- 326, // 172: vtctldata.UpdateCellsAliasRequest.cells_alias:type_name -> topodata.CellsAlias
- 326, // 173: vtctldata.UpdateCellsAliasResponse.cells_alias:type_name -> topodata.CellsAlias
- 286, // 174: vtctldata.ValidateResponse.results_by_keyspace:type_name -> vtctldata.ValidateResponse.ResultsByKeyspaceEntry
- 287, // 175: vtctldata.ValidateKeyspaceResponse.results_by_shard:type_name -> vtctldata.ValidateKeyspaceResponse.ResultsByShardEntry
- 288, // 176: vtctldata.ValidateSchemaKeyspaceResponse.results_by_shard:type_name -> vtctldata.ValidateSchemaKeyspaceResponse.ResultsByShardEntry
- 289, // 177: vtctldata.ValidateVersionKeyspaceResponse.results_by_shard:type_name -> vtctldata.ValidateVersionKeyspaceResponse.ResultsByShardEntry
- 290, // 178: vtctldata.ValidateVSchemaResponse.results_by_shard:type_name -> vtctldata.ValidateVSchemaResponse.ResultsByShardEntry
- 312, // 179: vtctldata.VDiffCreateRequest.tablet_types:type_name -> topodata.TabletType
- 300, // 180: vtctldata.VDiffCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
- 304, // 181: vtctldata.VDiffCreateRequest.filtered_replication_wait_time:type_name -> vttime.Duration
- 304, // 182: vtctldata.VDiffCreateRequest.wait_update_interval:type_name -> vttime.Duration
- 304, // 183: vtctldata.VDiffCreateRequest.max_diff_duration:type_name -> vttime.Duration
- 291, // 184: vtctldata.VDiffShowResponse.tablet_responses:type_name -> vtctldata.VDiffShowResponse.TabletResponsesEntry
- 292, // 185: vtctldata.WorkflowDeleteResponse.details:type_name -> vtctldata.WorkflowDeleteResponse.TabletInfo
- 296, // 186: vtctldata.WorkflowStatusResponse.table_copy_state:type_name -> vtctldata.WorkflowStatusResponse.TableCopyStateEntry
- 297, // 187: vtctldata.WorkflowStatusResponse.shard_streams:type_name -> vtctldata.WorkflowStatusResponse.ShardStreamsEntry
- 312, // 188: vtctldata.WorkflowSwitchTrafficRequest.tablet_types:type_name -> topodata.TabletType
- 304, // 189: vtctldata.WorkflowSwitchTrafficRequest.max_replication_lag_allowed:type_name -> vttime.Duration
- 304, // 190: vtctldata.WorkflowSwitchTrafficRequest.timeout:type_name -> vttime.Duration
- 327, // 191: vtctldata.WorkflowUpdateRequest.tablet_request:type_name -> tabletmanagerdata.UpdateVReplicationWorkflowRequest
- 298, // 192: vtctldata.WorkflowUpdateResponse.details:type_name -> vtctldata.WorkflowUpdateResponse.TabletInfo
- 251, // 193: vtctldata.Workflow.ShardStreamsEntry.value:type_name -> vtctldata.Workflow.ShardStream
- 252, // 194: vtctldata.Workflow.ShardStream.streams:type_name -> vtctldata.Workflow.Stream
- 328, // 195: vtctldata.Workflow.ShardStream.tablet_controls:type_name -> topodata.Shard.TabletControl
- 303, // 196: vtctldata.Workflow.Stream.tablet:type_name -> topodata.TabletAlias
- 329, // 197: vtctldata.Workflow.Stream.binlog_source:type_name -> binlogdata.BinlogSource
- 302, // 198: vtctldata.Workflow.Stream.transaction_timestamp:type_name -> vttime.Time
- 302, // 199: vtctldata.Workflow.Stream.time_updated:type_name -> vttime.Time
- 253, // 200: vtctldata.Workflow.Stream.copy_states:type_name -> vtctldata.Workflow.Stream.CopyState
- 254, // 201: vtctldata.Workflow.Stream.logs:type_name -> vtctldata.Workflow.Stream.Log
- 255, // 202: vtctldata.Workflow.Stream.throttler_status:type_name -> vtctldata.Workflow.Stream.ThrottlerStatus
- 312, // 203: vtctldata.Workflow.Stream.tablet_types:type_name -> topodata.TabletType
- 300, // 204: vtctldata.Workflow.Stream.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
- 302, // 205: vtctldata.Workflow.Stream.Log.created_at:type_name -> vttime.Time
- 302, // 206: vtctldata.Workflow.Stream.Log.updated_at:type_name -> vttime.Time
- 302, // 207: vtctldata.Workflow.Stream.ThrottlerStatus.time_throttled:type_name -> vttime.Time
- 258, // 208: vtctldata.ApplyVSchemaResponse.UnknownVindexParamsEntry.value:type_name -> vtctldata.ApplyVSchemaResponse.ParamList
- 260, // 209: vtctldata.CheckThrottlerResponse.MetricsEntry.value:type_name -> vtctldata.CheckThrottlerResponse.Metric
- 10, // 210: vtctldata.FindAllShardsInKeyspaceResponse.ShardsEntry.value:type_name -> vtctldata.Shard
- 326, // 211: vtctldata.GetCellsAliasesResponse.AliasesEntry.value:type_name -> topodata.CellsAlias
- 330, // 212: vtctldata.GetShardReplicationResponse.ShardReplicationByCellEntry.value:type_name -> topodata.ShardReplication
- 269, // 213: vtctldata.GetSrvKeyspaceNamesResponse.NamesEntry.value:type_name -> vtctldata.GetSrvKeyspaceNamesResponse.NameList
- 331, // 214: vtctldata.GetSrvKeyspacesResponse.SrvKeyspacesEntry.value:type_name -> topodata.SrvKeyspace
- 323, // 215: vtctldata.GetSrvVSchemasResponse.SrvVSchemasEntry.value:type_name -> vschema.SrvVSchema
- 272, // 216: vtctldata.GetThrottlerStatusResponse.AggregatedMetricsEntry.value:type_name -> vtctldata.GetThrottlerStatusResponse.MetricResult
- 302, // 217: vtctldata.GetThrottlerStatusResponse.MetricHealth.last_healthy_at:type_name -> vttime.Time
- 275, // 218: vtctldata.GetThrottlerStatusResponse.MetricsHealthEntry.value:type_name -> vtctldata.GetThrottlerStatusResponse.MetricHealth
- 322, // 219: vtctldata.GetThrottlerStatusResponse.ThrottledAppsEntry.value:type_name -> topodata.ThrottledAppRule
- 302, // 220: vtctldata.GetThrottlerStatusResponse.RecentApp.checked_at:type_name -> vttime.Time
- 279, // 221: vtctldata.GetThrottlerStatusResponse.RecentAppsEntry.value:type_name -> vtctldata.GetThrottlerStatusResponse.RecentApp
- 303, // 222: vtctldata.MoveTablesCreateResponse.TabletInfo.tablet:type_name -> topodata.TabletAlias
- 332, // 223: vtctldata.ShardReplicationPositionsResponse.ReplicationStatusesEntry.value:type_name -> replicationdata.Status
- 313, // 224: vtctldata.ShardReplicationPositionsResponse.TabletMapEntry.value:type_name -> topodata.Tablet
- 220, // 225: vtctldata.ValidateResponse.ResultsByKeyspaceEntry.value:type_name -> vtctldata.ValidateKeyspaceResponse
- 224, // 226: vtctldata.ValidateKeyspaceResponse.ResultsByShardEntry.value:type_name -> vtctldata.ValidateShardResponse
- 224, // 227: vtctldata.ValidateSchemaKeyspaceResponse.ResultsByShardEntry.value:type_name -> vtctldata.ValidateShardResponse
- 224, // 228: vtctldata.ValidateVersionKeyspaceResponse.ResultsByShardEntry.value:type_name -> vtctldata.ValidateShardResponse
- 224, // 229: vtctldata.ValidateVSchemaResponse.ResultsByShardEntry.value:type_name -> vtctldata.ValidateShardResponse
- 333, // 230: vtctldata.VDiffShowResponse.TabletResponsesEntry.value:type_name -> tabletmanagerdata.VDiffResponse
- 303, // 231: vtctldata.WorkflowDeleteResponse.TabletInfo.tablet:type_name -> topodata.TabletAlias
- 303, // 232: vtctldata.WorkflowStatusResponse.ShardStreamState.tablet:type_name -> topodata.TabletAlias
- 294, // 233: vtctldata.WorkflowStatusResponse.ShardStreams.streams:type_name -> vtctldata.WorkflowStatusResponse.ShardStreamState
- 293, // 234: vtctldata.WorkflowStatusResponse.TableCopyStateEntry.value:type_name -> vtctldata.WorkflowStatusResponse.TableCopyState
- 295, // 235: vtctldata.WorkflowStatusResponse.ShardStreamsEntry.value:type_name -> vtctldata.WorkflowStatusResponse.ShardStreams
- 303, // 236: vtctldata.WorkflowUpdateResponse.TabletInfo.tablet:type_name -> topodata.TabletAlias
- 237, // [237:237] is the sub-list for method output_type
- 237, // [237:237] is the sub-list for method input_type
- 237, // [237:237] is the sub-list for extension type_name
- 237, // [237:237] is the sub-list for extension extendee
- 0, // [0:237] is the sub-list for field type_name
+ 286, // 126: vtctldata.MoveTablesCreateResponse.details:type_name -> vtctldata.MoveTablesCreateResponse.TabletInfo
+ 307, // 127: vtctldata.PingTabletRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 307, // 128: vtctldata.PlannedReparentShardRequest.new_primary:type_name -> topodata.TabletAlias
+ 307, // 129: vtctldata.PlannedReparentShardRequest.avoid_primary:type_name -> topodata.TabletAlias
+ 308, // 130: vtctldata.PlannedReparentShardRequest.wait_replicas_timeout:type_name -> vttime.Duration
+ 308, // 131: vtctldata.PlannedReparentShardRequest.tolerable_replication_lag:type_name -> vttime.Duration
+ 307, // 132: vtctldata.PlannedReparentShardResponse.promoted_primary:type_name -> topodata.TabletAlias
+ 303, // 133: vtctldata.PlannedReparentShardResponse.events:type_name -> logutil.Event
+ 307, // 134: vtctldata.RefreshStateRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 307, // 135: vtctldata.ReloadSchemaRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 303, // 136: vtctldata.ReloadSchemaKeyspaceResponse.events:type_name -> logutil.Event
+ 303, // 137: vtctldata.ReloadSchemaShardResponse.events:type_name -> logutil.Event
+ 307, // 138: vtctldata.ReparentTabletRequest.tablet:type_name -> topodata.TabletAlias
+ 307, // 139: vtctldata.ReparentTabletResponse.primary:type_name -> topodata.TabletAlias
+ 316, // 140: vtctldata.ReshardCreateRequest.tablet_types:type_name -> topodata.TabletType
+ 304, // 141: vtctldata.ReshardCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
+ 307, // 142: vtctldata.RestoreFromBackupRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 306, // 143: vtctldata.RestoreFromBackupRequest.backup_time:type_name -> vttime.Time
+ 306, // 144: vtctldata.RestoreFromBackupRequest.restore_to_timestamp:type_name -> vttime.Time
+ 307, // 145: vtctldata.RestoreFromBackupResponse.tablet_alias:type_name -> topodata.TabletAlias
+ 303, // 146: vtctldata.RestoreFromBackupResponse.event:type_name -> logutil.Event
+ 287, // 147: vtctldata.RetrySchemaMigrationResponse.rows_affected_by_shard:type_name -> vtctldata.RetrySchemaMigrationResponse.RowsAffectedByShardEntry
+ 307, // 148: vtctldata.RunHealthCheckRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 305, // 149: vtctldata.SetKeyspaceDurabilityPolicyResponse.keyspace:type_name -> topodata.Keyspace
+ 305, // 150: vtctldata.SetKeyspaceShardingInfoResponse.keyspace:type_name -> topodata.Keyspace
+ 309, // 151: vtctldata.SetShardIsPrimaryServingResponse.shard:type_name -> topodata.Shard
+ 316, // 152: vtctldata.SetShardTabletControlRequest.tablet_type:type_name -> topodata.TabletType
+ 309, // 153: vtctldata.SetShardTabletControlResponse.shard:type_name -> topodata.Shard
+ 307, // 154: vtctldata.SetWritableRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 307, // 155: vtctldata.ShardReplicationAddRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 328, // 156: vtctldata.ShardReplicationFixResponse.error:type_name -> topodata.ShardReplicationError
+ 288, // 157: vtctldata.ShardReplicationPositionsResponse.replication_statuses:type_name -> vtctldata.ShardReplicationPositionsResponse.ReplicationStatusesEntry
+ 289, // 158: vtctldata.ShardReplicationPositionsResponse.tablet_map:type_name -> vtctldata.ShardReplicationPositionsResponse.TabletMapEntry
+ 307, // 159: vtctldata.ShardReplicationRemoveRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 307, // 160: vtctldata.SleepTabletRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 308, // 161: vtctldata.SleepTabletRequest.duration:type_name -> vttime.Duration
+ 329, // 162: vtctldata.SourceShardAddRequest.key_range:type_name -> topodata.KeyRange
+ 309, // 163: vtctldata.SourceShardAddResponse.shard:type_name -> topodata.Shard
+ 309, // 164: vtctldata.SourceShardDeleteResponse.shard:type_name -> topodata.Shard
+ 307, // 165: vtctldata.StartReplicationRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 307, // 166: vtctldata.StopReplicationRequest.tablet_alias:type_name -> topodata.TabletAlias
+ 307, // 167: vtctldata.TabletExternallyReparentedRequest.tablet:type_name -> topodata.TabletAlias
+ 307, // 168: vtctldata.TabletExternallyReparentedResponse.new_primary:type_name -> topodata.TabletAlias
+ 307, // 169: vtctldata.TabletExternallyReparentedResponse.old_primary:type_name -> topodata.TabletAlias
+ 310, // 170: vtctldata.UpdateCellInfoRequest.cell_info:type_name -> topodata.CellInfo
+ 310, // 171: vtctldata.UpdateCellInfoResponse.cell_info:type_name -> topodata.CellInfo
+ 330, // 172: vtctldata.UpdateCellsAliasRequest.cells_alias:type_name -> topodata.CellsAlias
+ 330, // 173: vtctldata.UpdateCellsAliasResponse.cells_alias:type_name -> topodata.CellsAlias
+ 290, // 174: vtctldata.ValidateResponse.results_by_keyspace:type_name -> vtctldata.ValidateResponse.ResultsByKeyspaceEntry
+ 291, // 175: vtctldata.ValidateKeyspaceResponse.results_by_shard:type_name -> vtctldata.ValidateKeyspaceResponse.ResultsByShardEntry
+ 292, // 176: vtctldata.ValidateSchemaKeyspaceResponse.results_by_shard:type_name -> vtctldata.ValidateSchemaKeyspaceResponse.ResultsByShardEntry
+ 293, // 177: vtctldata.ValidateVersionKeyspaceResponse.results_by_shard:type_name -> vtctldata.ValidateVersionKeyspaceResponse.ResultsByShardEntry
+ 294, // 178: vtctldata.ValidateVSchemaResponse.results_by_shard:type_name -> vtctldata.ValidateVSchemaResponse.ResultsByShardEntry
+ 316, // 179: vtctldata.VDiffCreateRequest.tablet_types:type_name -> topodata.TabletType
+ 304, // 180: vtctldata.VDiffCreateRequest.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
+ 308, // 181: vtctldata.VDiffCreateRequest.filtered_replication_wait_time:type_name -> vttime.Duration
+ 308, // 182: vtctldata.VDiffCreateRequest.wait_update_interval:type_name -> vttime.Duration
+ 308, // 183: vtctldata.VDiffCreateRequest.max_diff_duration:type_name -> vttime.Duration
+ 295, // 184: vtctldata.VDiffShowResponse.tablet_responses:type_name -> vtctldata.VDiffShowResponse.TabletResponsesEntry
+ 296, // 185: vtctldata.WorkflowDeleteResponse.details:type_name -> vtctldata.WorkflowDeleteResponse.TabletInfo
+ 300, // 186: vtctldata.WorkflowStatusResponse.table_copy_state:type_name -> vtctldata.WorkflowStatusResponse.TableCopyStateEntry
+ 301, // 187: vtctldata.WorkflowStatusResponse.shard_streams:type_name -> vtctldata.WorkflowStatusResponse.ShardStreamsEntry
+ 316, // 188: vtctldata.WorkflowSwitchTrafficRequest.tablet_types:type_name -> topodata.TabletType
+ 308, // 189: vtctldata.WorkflowSwitchTrafficRequest.max_replication_lag_allowed:type_name -> vttime.Duration
+ 308, // 190: vtctldata.WorkflowSwitchTrafficRequest.timeout:type_name -> vttime.Duration
+ 331, // 191: vtctldata.WorkflowUpdateRequest.tablet_request:type_name -> tabletmanagerdata.UpdateVReplicationWorkflowRequest
+ 302, // 192: vtctldata.WorkflowUpdateResponse.details:type_name -> vtctldata.WorkflowUpdateResponse.TabletInfo
+ 332, // 193: vtctldata.GetMirrorRulesResponse.mirror_rules:type_name -> vschema.MirrorRules
+ 316, // 194: vtctldata.WorkflowMirrorTrafficRequest.tablet_types:type_name -> topodata.TabletType
+ 255, // 195: vtctldata.Workflow.ShardStreamsEntry.value:type_name -> vtctldata.Workflow.ShardStream
+ 256, // 196: vtctldata.Workflow.ShardStream.streams:type_name -> vtctldata.Workflow.Stream
+ 333, // 197: vtctldata.Workflow.ShardStream.tablet_controls:type_name -> topodata.Shard.TabletControl
+ 307, // 198: vtctldata.Workflow.Stream.tablet:type_name -> topodata.TabletAlias
+ 334, // 199: vtctldata.Workflow.Stream.binlog_source:type_name -> binlogdata.BinlogSource
+ 306, // 200: vtctldata.Workflow.Stream.transaction_timestamp:type_name -> vttime.Time
+ 306, // 201: vtctldata.Workflow.Stream.time_updated:type_name -> vttime.Time
+ 257, // 202: vtctldata.Workflow.Stream.copy_states:type_name -> vtctldata.Workflow.Stream.CopyState
+ 258, // 203: vtctldata.Workflow.Stream.logs:type_name -> vtctldata.Workflow.Stream.Log
+ 259, // 204: vtctldata.Workflow.Stream.throttler_status:type_name -> vtctldata.Workflow.Stream.ThrottlerStatus
+ 316, // 205: vtctldata.Workflow.Stream.tablet_types:type_name -> topodata.TabletType
+ 304, // 206: vtctldata.Workflow.Stream.tablet_selection_preference:type_name -> tabletmanagerdata.TabletSelectionPreference
+ 306, // 207: vtctldata.Workflow.Stream.Log.created_at:type_name -> vttime.Time
+ 306, // 208: vtctldata.Workflow.Stream.Log.updated_at:type_name -> vttime.Time
+ 306, // 209: vtctldata.Workflow.Stream.ThrottlerStatus.time_throttled:type_name -> vttime.Time
+ 262, // 210: vtctldata.ApplyVSchemaResponse.UnknownVindexParamsEntry.value:type_name -> vtctldata.ApplyVSchemaResponse.ParamList
+ 264, // 211: vtctldata.CheckThrottlerResponse.MetricsEntry.value:type_name -> vtctldata.CheckThrottlerResponse.Metric
+ 10, // 212: vtctldata.FindAllShardsInKeyspaceResponse.ShardsEntry.value:type_name -> vtctldata.Shard
+ 330, // 213: vtctldata.GetCellsAliasesResponse.AliasesEntry.value:type_name -> topodata.CellsAlias
+ 335, // 214: vtctldata.GetShardReplicationResponse.ShardReplicationByCellEntry.value:type_name -> topodata.ShardReplication
+ 273, // 215: vtctldata.GetSrvKeyspaceNamesResponse.NamesEntry.value:type_name -> vtctldata.GetSrvKeyspaceNamesResponse.NameList
+ 336, // 216: vtctldata.GetSrvKeyspacesResponse.SrvKeyspacesEntry.value:type_name -> topodata.SrvKeyspace
+ 327, // 217: vtctldata.GetSrvVSchemasResponse.SrvVSchemasEntry.value:type_name -> vschema.SrvVSchema
+ 276, // 218: vtctldata.GetThrottlerStatusResponse.AggregatedMetricsEntry.value:type_name -> vtctldata.GetThrottlerStatusResponse.MetricResult
+ 306, // 219: vtctldata.GetThrottlerStatusResponse.MetricHealth.last_healthy_at:type_name -> vttime.Time
+ 279, // 220: vtctldata.GetThrottlerStatusResponse.MetricsHealthEntry.value:type_name -> vtctldata.GetThrottlerStatusResponse.MetricHealth
+ 326, // 221: vtctldata.GetThrottlerStatusResponse.ThrottledAppsEntry.value:type_name -> topodata.ThrottledAppRule
+ 306, // 222: vtctldata.GetThrottlerStatusResponse.RecentApp.checked_at:type_name -> vttime.Time
+ 283, // 223: vtctldata.GetThrottlerStatusResponse.RecentAppsEntry.value:type_name -> vtctldata.GetThrottlerStatusResponse.RecentApp
+ 307, // 224: vtctldata.MoveTablesCreateResponse.TabletInfo.tablet:type_name -> topodata.TabletAlias
+ 337, // 225: vtctldata.ShardReplicationPositionsResponse.ReplicationStatusesEntry.value:type_name -> replicationdata.Status
+ 317, // 226: vtctldata.ShardReplicationPositionsResponse.TabletMapEntry.value:type_name -> topodata.Tablet
+ 220, // 227: vtctldata.ValidateResponse.ResultsByKeyspaceEntry.value:type_name -> vtctldata.ValidateKeyspaceResponse
+ 224, // 228: vtctldata.ValidateKeyspaceResponse.ResultsByShardEntry.value:type_name -> vtctldata.ValidateShardResponse
+ 224, // 229: vtctldata.ValidateSchemaKeyspaceResponse.ResultsByShardEntry.value:type_name -> vtctldata.ValidateShardResponse
+ 224, // 230: vtctldata.ValidateVersionKeyspaceResponse.ResultsByShardEntry.value:type_name -> vtctldata.ValidateShardResponse
+ 224, // 231: vtctldata.ValidateVSchemaResponse.ResultsByShardEntry.value:type_name -> vtctldata.ValidateShardResponse
+ 338, // 232: vtctldata.VDiffShowResponse.TabletResponsesEntry.value:type_name -> tabletmanagerdata.VDiffResponse
+ 307, // 233: vtctldata.WorkflowDeleteResponse.TabletInfo.tablet:type_name -> topodata.TabletAlias
+ 307, // 234: vtctldata.WorkflowStatusResponse.ShardStreamState.tablet:type_name -> topodata.TabletAlias
+ 298, // 235: vtctldata.WorkflowStatusResponse.ShardStreams.streams:type_name -> vtctldata.WorkflowStatusResponse.ShardStreamState
+ 297, // 236: vtctldata.WorkflowStatusResponse.TableCopyStateEntry.value:type_name -> vtctldata.WorkflowStatusResponse.TableCopyState
+ 299, // 237: vtctldata.WorkflowStatusResponse.ShardStreamsEntry.value:type_name -> vtctldata.WorkflowStatusResponse.ShardStreams
+ 307, // 238: vtctldata.WorkflowUpdateResponse.TabletInfo.tablet:type_name -> topodata.TabletAlias
+ 239, // [239:239] is the sub-list for method output_type
+ 239, // [239:239] is the sub-list for method input_type
+ 239, // [239:239] is the sub-list for extension type_name
+ 239, // [239:239] is the sub-list for extension extendee
+ 0, // [0:239] is the sub-list for field type_name
}
func init() { file_vtctldata_proto_init() }
@@ -22966,8 +23217,20 @@ func file_vtctldata_proto_init() {
return nil
}
}
+ file_vtctldata_proto_msgTypes[245].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[246].Exporter = func(v any, i int) any {
- switch v := v.(*Workflow_ReplicationLocation); i {
+ switch v := v.(*GetMirrorRulesResponse); i {
case 0:
return &v.state
case 1:
@@ -22979,7 +23242,7 @@ func file_vtctldata_proto_init() {
}
}
file_vtctldata_proto_msgTypes[247].Exporter = func(v any, i int) any {
- switch v := v.(*Workflow_ShardStream); i {
+ switch v := v.(*WorkflowMirrorTrafficRequest); i {
case 0:
return &v.state
case 1:
@@ -22991,6 +23254,42 @@ func file_vtctldata_proto_init() {
}
}
file_vtctldata_proto_msgTypes[248].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[250].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[251].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[252].Exporter = func(v any, i int) any {
switch v := v.(*Workflow_Stream); i {
case 0:
return &v.state
@@ -23002,7 +23301,7 @@ func file_vtctldata_proto_init() {
return nil
}
}
- file_vtctldata_proto_msgTypes[249].Exporter = func(v any, i int) any {
+ file_vtctldata_proto_msgTypes[253].Exporter = func(v any, i int) any {
switch v := v.(*Workflow_Stream_CopyState); i {
case 0:
return &v.state
@@ -23014,7 +23313,7 @@ func file_vtctldata_proto_init() {
return nil
}
}
- file_vtctldata_proto_msgTypes[250].Exporter = func(v any, i int) any {
+ file_vtctldata_proto_msgTypes[254].Exporter = func(v any, i int) any {
switch v := v.(*Workflow_Stream_Log); i {
case 0:
return &v.state
@@ -23026,7 +23325,7 @@ func file_vtctldata_proto_init() {
return nil
}
}
- file_vtctldata_proto_msgTypes[251].Exporter = func(v any, i int) any {
+ file_vtctldata_proto_msgTypes[255].Exporter = func(v any, i int) any {
switch v := v.(*Workflow_Stream_ThrottlerStatus); i {
case 0:
return &v.state
@@ -23038,7 +23337,7 @@ func file_vtctldata_proto_init() {
return nil
}
}
- file_vtctldata_proto_msgTypes[254].Exporter = func(v any, i int) any {
+ file_vtctldata_proto_msgTypes[258].Exporter = func(v any, i int) any {
switch v := v.(*ApplyVSchemaResponse_ParamList); i {
case 0:
return &v.state
@@ -23050,7 +23349,7 @@ func file_vtctldata_proto_init() {
return nil
}
}
- file_vtctldata_proto_msgTypes[256].Exporter = func(v any, i int) any {
+ file_vtctldata_proto_msgTypes[260].Exporter = func(v any, i int) any {
switch v := v.(*CheckThrottlerResponse_Metric); i {
case 0:
return &v.state
@@ -23062,7 +23361,7 @@ func file_vtctldata_proto_init() {
return nil
}
}
- file_vtctldata_proto_msgTypes[265].Exporter = func(v any, i int) any {
+ file_vtctldata_proto_msgTypes[269].Exporter = func(v any, i int) any {
switch v := v.(*GetSrvKeyspaceNamesResponse_NameList); i {
case 0:
return &v.state
@@ -23074,7 +23373,7 @@ func file_vtctldata_proto_init() {
return nil
}
}
- file_vtctldata_proto_msgTypes[268].Exporter = func(v any, i int) any {
+ file_vtctldata_proto_msgTypes[272].Exporter = func(v any, i int) any {
switch v := v.(*GetThrottlerStatusResponse_MetricResult); i {
case 0:
return &v.state
@@ -23086,7 +23385,7 @@ func file_vtctldata_proto_init() {
return nil
}
}
- file_vtctldata_proto_msgTypes[271].Exporter = func(v any, i int) any {
+ file_vtctldata_proto_msgTypes[275].Exporter = func(v any, i int) any {
switch v := v.(*GetThrottlerStatusResponse_MetricHealth); i {
case 0:
return &v.state
@@ -23098,7 +23397,7 @@ func file_vtctldata_proto_init() {
return nil
}
}
- file_vtctldata_proto_msgTypes[275].Exporter = func(v any, i int) any {
+ file_vtctldata_proto_msgTypes[279].Exporter = func(v any, i int) any {
switch v := v.(*GetThrottlerStatusResponse_RecentApp); i {
case 0:
return &v.state
@@ -23110,7 +23409,7 @@ func file_vtctldata_proto_init() {
return nil
}
}
- file_vtctldata_proto_msgTypes[278].Exporter = func(v any, i int) any {
+ file_vtctldata_proto_msgTypes[282].Exporter = func(v any, i int) any {
switch v := v.(*MoveTablesCreateResponse_TabletInfo); i {
case 0:
return &v.state
@@ -23122,7 +23421,7 @@ func file_vtctldata_proto_init() {
return nil
}
}
- file_vtctldata_proto_msgTypes[288].Exporter = func(v any, i int) any {
+ file_vtctldata_proto_msgTypes[292].Exporter = func(v any, i int) any {
switch v := v.(*WorkflowDeleteResponse_TabletInfo); i {
case 0:
return &v.state
@@ -23134,7 +23433,7 @@ func file_vtctldata_proto_init() {
return nil
}
}
- file_vtctldata_proto_msgTypes[289].Exporter = func(v any, i int) any {
+ file_vtctldata_proto_msgTypes[293].Exporter = func(v any, i int) any {
switch v := v.(*WorkflowStatusResponse_TableCopyState); i {
case 0:
return &v.state
@@ -23146,7 +23445,7 @@ func file_vtctldata_proto_init() {
return nil
}
}
- file_vtctldata_proto_msgTypes[290].Exporter = func(v any, i int) any {
+ file_vtctldata_proto_msgTypes[294].Exporter = func(v any, i int) any {
switch v := v.(*WorkflowStatusResponse_ShardStreamState); i {
case 0:
return &v.state
@@ -23158,7 +23457,7 @@ func file_vtctldata_proto_init() {
return nil
}
}
- file_vtctldata_proto_msgTypes[291].Exporter = func(v any, i int) any {
+ file_vtctldata_proto_msgTypes[295].Exporter = func(v any, i int) any {
switch v := v.(*WorkflowStatusResponse_ShardStreams); i {
case 0:
return &v.state
@@ -23170,7 +23469,7 @@ func file_vtctldata_proto_init() {
return nil
}
}
- file_vtctldata_proto_msgTypes[294].Exporter = func(v any, i int) any {
+ file_vtctldata_proto_msgTypes[298].Exporter = func(v any, i int) any {
switch v := v.(*WorkflowUpdateResponse_TabletInfo); i {
case 0:
return &v.state
@@ -23189,7 +23488,7 @@ func file_vtctldata_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_vtctldata_proto_rawDesc,
NumEnums: 4,
- NumMessages: 295,
+ NumMessages: 299,
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 0c23573ec48..cd52155d618 100644
--- a/go/vt/proto/vtctldata/vtctldata_vtproto.pb.go
+++ b/go/vt/proto/vtctldata/vtctldata_vtproto.pb.go
@@ -5792,6 +5792,85 @@ func (m *WorkflowUpdateResponse) CloneMessageVT() proto.Message {
return m.CloneVT()
}
+func (m *GetMirrorRulesRequest) CloneVT() *GetMirrorRulesRequest {
+ if m == nil {
+ return (*GetMirrorRulesRequest)(nil)
+ }
+ r := &GetMirrorRulesRequest{}
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *GetMirrorRulesRequest) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
+func (m *GetMirrorRulesResponse) CloneVT() *GetMirrorRulesResponse {
+ if m == nil {
+ return (*GetMirrorRulesResponse)(nil)
+ }
+ r := &GetMirrorRulesResponse{
+ MirrorRules: m.MirrorRules.CloneVT(),
+ }
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *GetMirrorRulesResponse) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
+func (m *WorkflowMirrorTrafficRequest) CloneVT() *WorkflowMirrorTrafficRequest {
+ if m == nil {
+ return (*WorkflowMirrorTrafficRequest)(nil)
+ }
+ r := &WorkflowMirrorTrafficRequest{
+ Keyspace: m.Keyspace,
+ Workflow: m.Workflow,
+ Percent: m.Percent,
+ }
+ if rhs := m.TabletTypes; rhs != nil {
+ tmpContainer := make([]topodata.TabletType, len(rhs))
+ copy(tmpContainer, rhs)
+ r.TabletTypes = tmpContainer
+ }
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *WorkflowMirrorTrafficRequest) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
+func (m *WorkflowMirrorTrafficResponse) CloneVT() *WorkflowMirrorTrafficResponse {
+ if m == nil {
+ return (*WorkflowMirrorTrafficResponse)(nil)
+ }
+ r := &WorkflowMirrorTrafficResponse{
+ Summary: m.Summary,
+ StartState: m.StartState,
+ CurrentState: m.CurrentState,
+ }
+ if len(m.unknownFields) > 0 {
+ r.unknownFields = make([]byte, len(m.unknownFields))
+ copy(r.unknownFields, m.unknownFields)
+ }
+ return r
+}
+
+func (m *WorkflowMirrorTrafficResponse) CloneMessageVT() proto.Message {
+ return m.CloneVT()
+}
+
func (m *ExecuteVtctlCommandRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
@@ -21228,6 +21307,210 @@ func (m *WorkflowUpdateResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error
return len(dAtA) - i, nil
}
+func (m *GetMirrorRulesRequest) 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 *GetMirrorRulesRequest) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *GetMirrorRulesRequest) 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 *GetMirrorRulesResponse) 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 *GetMirrorRulesResponse) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *GetMirrorRulesResponse) 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.MirrorRules != nil {
+ size, err := m.MirrorRules.MarshalToSizedBufferVT(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarint(dAtA, i, uint64(size))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *WorkflowMirrorTrafficRequest) 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 *WorkflowMirrorTrafficRequest) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *WorkflowMirrorTrafficRequest) 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.Percent != 0 {
+ i -= 4
+ binary.LittleEndian.PutUint32(dAtA[i:], uint32(math.Float32bits(float32(m.Percent))))
+ i--
+ dAtA[i] = 0x25
+ }
+ if len(m.TabletTypes) > 0 {
+ var pksize2 int
+ for _, num := range m.TabletTypes {
+ pksize2 += sov(uint64(num))
+ }
+ i -= pksize2
+ j1 := i
+ for _, num1 := range m.TabletTypes {
+ num := uint64(num1)
+ for num >= 1<<7 {
+ dAtA[j1] = uint8(uint64(num)&0x7f | 0x80)
+ num >>= 7
+ j1++
+ }
+ dAtA[j1] = uint8(num)
+ j1++
+ }
+ i = encodeVarint(dAtA, i, uint64(pksize2))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.Workflow) > 0 {
+ i -= len(m.Workflow)
+ copy(dAtA[i:], m.Workflow)
+ i = encodeVarint(dAtA, i, uint64(len(m.Workflow)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.Keyspace) > 0 {
+ i -= len(m.Keyspace)
+ copy(dAtA[i:], m.Keyspace)
+ i = encodeVarint(dAtA, i, uint64(len(m.Keyspace)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *WorkflowMirrorTrafficResponse) 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 *WorkflowMirrorTrafficResponse) MarshalToVT(dAtA []byte) (int, error) {
+ size := m.SizeVT()
+ return m.MarshalToSizedBufferVT(dAtA[:size])
+}
+
+func (m *WorkflowMirrorTrafficResponse) 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.CurrentState) > 0 {
+ i -= len(m.CurrentState)
+ copy(dAtA[i:], m.CurrentState)
+ i = encodeVarint(dAtA, i, uint64(len(m.CurrentState)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.StartState) > 0 {
+ i -= len(m.StartState)
+ copy(dAtA[i:], m.StartState)
+ i = encodeVarint(dAtA, i, uint64(len(m.StartState)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.Summary) > 0 {
+ i -= len(m.Summary)
+ copy(dAtA[i:], m.Summary)
+ i = encodeVarint(dAtA, i, uint64(len(m.Summary)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
func encodeVarint(dAtA []byte, offset int, v uint64) int {
offset -= sov(v)
base := offset
@@ -27074,6 +27357,80 @@ func (m *WorkflowUpdateResponse) SizeVT() (n int) {
return n
}
+func (m *GetMirrorRulesRequest) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ n += len(m.unknownFields)
+ return n
+}
+
+func (m *GetMirrorRulesResponse) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.MirrorRules != nil {
+ l = m.MirrorRules.SizeVT()
+ n += 1 + l + sov(uint64(l))
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
+func (m *WorkflowMirrorTrafficRequest) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Keyspace)
+ if l > 0 {
+ n += 1 + l + sov(uint64(l))
+ }
+ l = len(m.Workflow)
+ if l > 0 {
+ n += 1 + l + sov(uint64(l))
+ }
+ if len(m.TabletTypes) > 0 {
+ l = 0
+ for _, e := range m.TabletTypes {
+ l += sov(uint64(e))
+ }
+ n += 1 + sov(uint64(l)) + l
+ }
+ if m.Percent != 0 {
+ n += 5
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
+func (m *WorkflowMirrorTrafficResponse) SizeVT() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Summary)
+ if l > 0 {
+ n += 1 + l + sov(uint64(l))
+ }
+ l = len(m.StartState)
+ if l > 0 {
+ n += 1 + l + sov(uint64(l))
+ }
+ l = len(m.CurrentState)
+ if l > 0 {
+ n += 1 + l + sov(uint64(l))
+ }
+ n += len(m.unknownFields)
+ return n
+}
+
func sov(x uint64) (n int) {
return (bits.Len64(x|1) + 6) / 7
}
@@ -65422,6 +65779,486 @@ func (m *WorkflowUpdateResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
+func (m *GetMirrorRulesRequest) 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 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: GetMirrorRulesRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: GetMirrorRulesRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ default:
+ iNdEx = preIndex
+ skippy, err := skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return 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 *GetMirrorRulesResponse) 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 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: GetMirrorRulesResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: GetMirrorRulesResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field MirrorRules", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.MirrorRules == nil {
+ m.MirrorRules = &vschema.MirrorRules{}
+ }
+ if err := m.MirrorRules.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return 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 *WorkflowMirrorTrafficRequest) 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 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: WorkflowMirrorTrafficRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: WorkflowMirrorTrafficRequest: 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 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 ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return 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 Workflow", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return 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 ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Workflow = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType == 0 {
+ var v topodata.TabletType
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= topodata.TabletType(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.TabletTypes = append(m.TabletTypes, v)
+ } else if wireType == 2 {
+ var packedLen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ packedLen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if packedLen < 0 {
+ return ErrInvalidLength
+ }
+ postIndex := iNdEx + packedLen
+ if postIndex < 0 {
+ return ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ var elementCount int
+ if elementCount != 0 && len(m.TabletTypes) == 0 {
+ m.TabletTypes = make([]topodata.TabletType, 0, elementCount)
+ }
+ for iNdEx < postIndex {
+ var v topodata.TabletType
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= topodata.TabletType(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.TabletTypes = append(m.TabletTypes, v)
+ }
+ } else {
+ return fmt.Errorf("proto: wrong wireType = %d for field TabletTypes", wireType)
+ }
+ case 4:
+ if wireType != 5 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Percent", wireType)
+ }
+ var v uint32
+ if (iNdEx + 4) > l {
+ return io.ErrUnexpectedEOF
+ }
+ v = uint32(binary.LittleEndian.Uint32(dAtA[iNdEx:]))
+ iNdEx += 4
+ m.Percent = float32(math.Float32frombits(v))
+ default:
+ iNdEx = preIndex
+ skippy, err := skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return 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 *WorkflowMirrorTrafficResponse) 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 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: WorkflowMirrorTrafficResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: WorkflowMirrorTrafficResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Summary", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return 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 ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Summary = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field StartState", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return 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 ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.StartState = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field CurrentState", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return 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 ErrInvalidLength
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.CurrentState = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skip(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return 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 skip(dAtA []byte) (n int, err error) {
l := len(dAtA)
diff --git a/go/vt/proto/vtctlservice/vtctlservice.pb.go b/go/vt/proto/vtctlservice/vtctlservice.pb.go
index 194571e550d..e5ff978e853 100644
--- a/go/vt/proto/vtctlservice/vtctlservice.pb.go
+++ b/go/vt/proto/vtctlservice/vtctlservice.pb.go
@@ -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, 0x98, 0x56, 0x0a, 0x06, 0x56, 0x74, 0x63, 0x74, 0x6c,
+ 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x32, 0xdf, 0x57, 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,
@@ -741,10 +741,22 @@ var file_vtctlservice_proto_rawDesc = []byte{
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, 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,
+ 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{
@@ -866,120 +878,124 @@ var file_vtctlservice_proto_goTypes = []any{
(*vtctldata.WorkflowStatusRequest)(nil), // 115: vtctldata.WorkflowStatusRequest
(*vtctldata.WorkflowSwitchTrafficRequest)(nil), // 116: vtctldata.WorkflowSwitchTrafficRequest
(*vtctldata.WorkflowUpdateRequest)(nil), // 117: vtctldata.WorkflowUpdateRequest
- (*vtctldata.ExecuteVtctlCommandResponse)(nil), // 118: vtctldata.ExecuteVtctlCommandResponse
- (*vtctldata.AddCellInfoResponse)(nil), // 119: vtctldata.AddCellInfoResponse
- (*vtctldata.AddCellsAliasResponse)(nil), // 120: vtctldata.AddCellsAliasResponse
- (*vtctldata.ApplyRoutingRulesResponse)(nil), // 121: vtctldata.ApplyRoutingRulesResponse
- (*vtctldata.ApplySchemaResponse)(nil), // 122: vtctldata.ApplySchemaResponse
- (*vtctldata.ApplyKeyspaceRoutingRulesResponse)(nil), // 123: vtctldata.ApplyKeyspaceRoutingRulesResponse
- (*vtctldata.ApplyShardRoutingRulesResponse)(nil), // 124: vtctldata.ApplyShardRoutingRulesResponse
- (*vtctldata.ApplyVSchemaResponse)(nil), // 125: vtctldata.ApplyVSchemaResponse
- (*vtctldata.BackupResponse)(nil), // 126: vtctldata.BackupResponse
- (*vtctldata.CancelSchemaMigrationResponse)(nil), // 127: vtctldata.CancelSchemaMigrationResponse
- (*vtctldata.ChangeTabletTypeResponse)(nil), // 128: vtctldata.ChangeTabletTypeResponse
- (*vtctldata.CheckThrottlerResponse)(nil), // 129: vtctldata.CheckThrottlerResponse
- (*vtctldata.CleanupSchemaMigrationResponse)(nil), // 130: vtctldata.CleanupSchemaMigrationResponse
- (*vtctldata.CompleteSchemaMigrationResponse)(nil), // 131: vtctldata.CompleteSchemaMigrationResponse
- (*vtctldata.CreateKeyspaceResponse)(nil), // 132: vtctldata.CreateKeyspaceResponse
- (*vtctldata.CreateShardResponse)(nil), // 133: vtctldata.CreateShardResponse
- (*vtctldata.DeleteCellInfoResponse)(nil), // 134: vtctldata.DeleteCellInfoResponse
- (*vtctldata.DeleteCellsAliasResponse)(nil), // 135: vtctldata.DeleteCellsAliasResponse
- (*vtctldata.DeleteKeyspaceResponse)(nil), // 136: vtctldata.DeleteKeyspaceResponse
- (*vtctldata.DeleteShardsResponse)(nil), // 137: vtctldata.DeleteShardsResponse
- (*vtctldata.DeleteSrvVSchemaResponse)(nil), // 138: vtctldata.DeleteSrvVSchemaResponse
- (*vtctldata.DeleteTabletsResponse)(nil), // 139: vtctldata.DeleteTabletsResponse
- (*vtctldata.EmergencyReparentShardResponse)(nil), // 140: vtctldata.EmergencyReparentShardResponse
- (*vtctldata.ExecuteFetchAsAppResponse)(nil), // 141: vtctldata.ExecuteFetchAsAppResponse
- (*vtctldata.ExecuteFetchAsDBAResponse)(nil), // 142: vtctldata.ExecuteFetchAsDBAResponse
- (*vtctldata.ExecuteHookResponse)(nil), // 143: vtctldata.ExecuteHookResponse
- (*vtctldata.ExecuteMultiFetchAsDBAResponse)(nil), // 144: vtctldata.ExecuteMultiFetchAsDBAResponse
- (*vtctldata.FindAllShardsInKeyspaceResponse)(nil), // 145: vtctldata.FindAllShardsInKeyspaceResponse
- (*vtctldata.ForceCutOverSchemaMigrationResponse)(nil), // 146: vtctldata.ForceCutOverSchemaMigrationResponse
- (*vtctldata.GetBackupsResponse)(nil), // 147: vtctldata.GetBackupsResponse
- (*vtctldata.GetCellInfoResponse)(nil), // 148: vtctldata.GetCellInfoResponse
- (*vtctldata.GetCellInfoNamesResponse)(nil), // 149: vtctldata.GetCellInfoNamesResponse
- (*vtctldata.GetCellsAliasesResponse)(nil), // 150: vtctldata.GetCellsAliasesResponse
- (*vtctldata.GetFullStatusResponse)(nil), // 151: vtctldata.GetFullStatusResponse
- (*vtctldata.GetKeyspaceResponse)(nil), // 152: vtctldata.GetKeyspaceResponse
- (*vtctldata.GetKeyspacesResponse)(nil), // 153: vtctldata.GetKeyspacesResponse
- (*vtctldata.GetKeyspaceRoutingRulesResponse)(nil), // 154: vtctldata.GetKeyspaceRoutingRulesResponse
- (*vtctldata.GetPermissionsResponse)(nil), // 155: vtctldata.GetPermissionsResponse
- (*vtctldata.GetRoutingRulesResponse)(nil), // 156: vtctldata.GetRoutingRulesResponse
- (*vtctldata.GetSchemaResponse)(nil), // 157: vtctldata.GetSchemaResponse
- (*vtctldata.GetSchemaMigrationsResponse)(nil), // 158: vtctldata.GetSchemaMigrationsResponse
- (*vtctldata.GetShardReplicationResponse)(nil), // 159: vtctldata.GetShardReplicationResponse
- (*vtctldata.GetShardResponse)(nil), // 160: vtctldata.GetShardResponse
- (*vtctldata.GetShardRoutingRulesResponse)(nil), // 161: vtctldata.GetShardRoutingRulesResponse
- (*vtctldata.GetSrvKeyspaceNamesResponse)(nil), // 162: vtctldata.GetSrvKeyspaceNamesResponse
- (*vtctldata.GetSrvKeyspacesResponse)(nil), // 163: vtctldata.GetSrvKeyspacesResponse
- (*vtctldata.UpdateThrottlerConfigResponse)(nil), // 164: vtctldata.UpdateThrottlerConfigResponse
- (*vtctldata.GetSrvVSchemaResponse)(nil), // 165: vtctldata.GetSrvVSchemaResponse
- (*vtctldata.GetSrvVSchemasResponse)(nil), // 166: vtctldata.GetSrvVSchemasResponse
- (*vtctldata.GetTabletResponse)(nil), // 167: vtctldata.GetTabletResponse
- (*vtctldata.GetTabletsResponse)(nil), // 168: vtctldata.GetTabletsResponse
- (*vtctldata.GetThrottlerStatusResponse)(nil), // 169: vtctldata.GetThrottlerStatusResponse
- (*vtctldata.GetTopologyPathResponse)(nil), // 170: vtctldata.GetTopologyPathResponse
- (*vtctldata.GetVersionResponse)(nil), // 171: vtctldata.GetVersionResponse
- (*vtctldata.GetVSchemaResponse)(nil), // 172: vtctldata.GetVSchemaResponse
- (*vtctldata.GetWorkflowsResponse)(nil), // 173: vtctldata.GetWorkflowsResponse
- (*vtctldata.InitShardPrimaryResponse)(nil), // 174: vtctldata.InitShardPrimaryResponse
- (*vtctldata.LaunchSchemaMigrationResponse)(nil), // 175: vtctldata.LaunchSchemaMigrationResponse
- (*vtctldata.LookupVindexCreateResponse)(nil), // 176: vtctldata.LookupVindexCreateResponse
- (*vtctldata.LookupVindexExternalizeResponse)(nil), // 177: vtctldata.LookupVindexExternalizeResponse
- (*vtctldata.MaterializeCreateResponse)(nil), // 178: vtctldata.MaterializeCreateResponse
- (*vtctldata.WorkflowStatusResponse)(nil), // 179: vtctldata.WorkflowStatusResponse
- (*vtctldata.MountRegisterResponse)(nil), // 180: vtctldata.MountRegisterResponse
- (*vtctldata.MountUnregisterResponse)(nil), // 181: vtctldata.MountUnregisterResponse
- (*vtctldata.MountShowResponse)(nil), // 182: vtctldata.MountShowResponse
- (*vtctldata.MountListResponse)(nil), // 183: vtctldata.MountListResponse
- (*vtctldata.MoveTablesCompleteResponse)(nil), // 184: vtctldata.MoveTablesCompleteResponse
- (*vtctldata.PingTabletResponse)(nil), // 185: vtctldata.PingTabletResponse
- (*vtctldata.PlannedReparentShardResponse)(nil), // 186: vtctldata.PlannedReparentShardResponse
- (*vtctldata.RebuildKeyspaceGraphResponse)(nil), // 187: vtctldata.RebuildKeyspaceGraphResponse
- (*vtctldata.RebuildVSchemaGraphResponse)(nil), // 188: vtctldata.RebuildVSchemaGraphResponse
- (*vtctldata.RefreshStateResponse)(nil), // 189: vtctldata.RefreshStateResponse
- (*vtctldata.RefreshStateByShardResponse)(nil), // 190: vtctldata.RefreshStateByShardResponse
- (*vtctldata.ReloadSchemaResponse)(nil), // 191: vtctldata.ReloadSchemaResponse
- (*vtctldata.ReloadSchemaKeyspaceResponse)(nil), // 192: vtctldata.ReloadSchemaKeyspaceResponse
- (*vtctldata.ReloadSchemaShardResponse)(nil), // 193: vtctldata.ReloadSchemaShardResponse
- (*vtctldata.RemoveBackupResponse)(nil), // 194: vtctldata.RemoveBackupResponse
- (*vtctldata.RemoveKeyspaceCellResponse)(nil), // 195: vtctldata.RemoveKeyspaceCellResponse
- (*vtctldata.RemoveShardCellResponse)(nil), // 196: vtctldata.RemoveShardCellResponse
- (*vtctldata.ReparentTabletResponse)(nil), // 197: vtctldata.ReparentTabletResponse
- (*vtctldata.RestoreFromBackupResponse)(nil), // 198: vtctldata.RestoreFromBackupResponse
- (*vtctldata.RetrySchemaMigrationResponse)(nil), // 199: vtctldata.RetrySchemaMigrationResponse
- (*vtctldata.RunHealthCheckResponse)(nil), // 200: vtctldata.RunHealthCheckResponse
- (*vtctldata.SetKeyspaceDurabilityPolicyResponse)(nil), // 201: vtctldata.SetKeyspaceDurabilityPolicyResponse
- (*vtctldata.SetShardIsPrimaryServingResponse)(nil), // 202: vtctldata.SetShardIsPrimaryServingResponse
- (*vtctldata.SetShardTabletControlResponse)(nil), // 203: vtctldata.SetShardTabletControlResponse
- (*vtctldata.SetWritableResponse)(nil), // 204: vtctldata.SetWritableResponse
- (*vtctldata.ShardReplicationAddResponse)(nil), // 205: vtctldata.ShardReplicationAddResponse
- (*vtctldata.ShardReplicationFixResponse)(nil), // 206: vtctldata.ShardReplicationFixResponse
- (*vtctldata.ShardReplicationPositionsResponse)(nil), // 207: vtctldata.ShardReplicationPositionsResponse
- (*vtctldata.ShardReplicationRemoveResponse)(nil), // 208: vtctldata.ShardReplicationRemoveResponse
- (*vtctldata.SleepTabletResponse)(nil), // 209: vtctldata.SleepTabletResponse
- (*vtctldata.SourceShardAddResponse)(nil), // 210: vtctldata.SourceShardAddResponse
- (*vtctldata.SourceShardDeleteResponse)(nil), // 211: vtctldata.SourceShardDeleteResponse
- (*vtctldata.StartReplicationResponse)(nil), // 212: vtctldata.StartReplicationResponse
- (*vtctldata.StopReplicationResponse)(nil), // 213: vtctldata.StopReplicationResponse
- (*vtctldata.TabletExternallyReparentedResponse)(nil), // 214: vtctldata.TabletExternallyReparentedResponse
- (*vtctldata.UpdateCellInfoResponse)(nil), // 215: vtctldata.UpdateCellInfoResponse
- (*vtctldata.UpdateCellsAliasResponse)(nil), // 216: vtctldata.UpdateCellsAliasResponse
- (*vtctldata.ValidateResponse)(nil), // 217: vtctldata.ValidateResponse
- (*vtctldata.ValidateKeyspaceResponse)(nil), // 218: vtctldata.ValidateKeyspaceResponse
- (*vtctldata.ValidateSchemaKeyspaceResponse)(nil), // 219: vtctldata.ValidateSchemaKeyspaceResponse
- (*vtctldata.ValidateShardResponse)(nil), // 220: vtctldata.ValidateShardResponse
- (*vtctldata.ValidateVersionKeyspaceResponse)(nil), // 221: vtctldata.ValidateVersionKeyspaceResponse
- (*vtctldata.ValidateVersionShardResponse)(nil), // 222: vtctldata.ValidateVersionShardResponse
- (*vtctldata.ValidateVSchemaResponse)(nil), // 223: vtctldata.ValidateVSchemaResponse
- (*vtctldata.VDiffCreateResponse)(nil), // 224: vtctldata.VDiffCreateResponse
- (*vtctldata.VDiffDeleteResponse)(nil), // 225: vtctldata.VDiffDeleteResponse
- (*vtctldata.VDiffResumeResponse)(nil), // 226: vtctldata.VDiffResumeResponse
- (*vtctldata.VDiffShowResponse)(nil), // 227: vtctldata.VDiffShowResponse
- (*vtctldata.VDiffStopResponse)(nil), // 228: vtctldata.VDiffStopResponse
- (*vtctldata.WorkflowDeleteResponse)(nil), // 229: vtctldata.WorkflowDeleteResponse
- (*vtctldata.WorkflowSwitchTrafficResponse)(nil), // 230: vtctldata.WorkflowSwitchTrafficResponse
- (*vtctldata.WorkflowUpdateResponse)(nil), // 231: vtctldata.WorkflowUpdateResponse
+ (*vtctldata.GetMirrorRulesRequest)(nil), // 118: vtctldata.GetMirrorRulesRequest
+ (*vtctldata.WorkflowMirrorTrafficRequest)(nil), // 119: vtctldata.WorkflowMirrorTrafficRequest
+ (*vtctldata.ExecuteVtctlCommandResponse)(nil), // 120: vtctldata.ExecuteVtctlCommandResponse
+ (*vtctldata.AddCellInfoResponse)(nil), // 121: vtctldata.AddCellInfoResponse
+ (*vtctldata.AddCellsAliasResponse)(nil), // 122: vtctldata.AddCellsAliasResponse
+ (*vtctldata.ApplyRoutingRulesResponse)(nil), // 123: vtctldata.ApplyRoutingRulesResponse
+ (*vtctldata.ApplySchemaResponse)(nil), // 124: vtctldata.ApplySchemaResponse
+ (*vtctldata.ApplyKeyspaceRoutingRulesResponse)(nil), // 125: vtctldata.ApplyKeyspaceRoutingRulesResponse
+ (*vtctldata.ApplyShardRoutingRulesResponse)(nil), // 126: vtctldata.ApplyShardRoutingRulesResponse
+ (*vtctldata.ApplyVSchemaResponse)(nil), // 127: vtctldata.ApplyVSchemaResponse
+ (*vtctldata.BackupResponse)(nil), // 128: vtctldata.BackupResponse
+ (*vtctldata.CancelSchemaMigrationResponse)(nil), // 129: vtctldata.CancelSchemaMigrationResponse
+ (*vtctldata.ChangeTabletTypeResponse)(nil), // 130: vtctldata.ChangeTabletTypeResponse
+ (*vtctldata.CheckThrottlerResponse)(nil), // 131: vtctldata.CheckThrottlerResponse
+ (*vtctldata.CleanupSchemaMigrationResponse)(nil), // 132: vtctldata.CleanupSchemaMigrationResponse
+ (*vtctldata.CompleteSchemaMigrationResponse)(nil), // 133: vtctldata.CompleteSchemaMigrationResponse
+ (*vtctldata.CreateKeyspaceResponse)(nil), // 134: vtctldata.CreateKeyspaceResponse
+ (*vtctldata.CreateShardResponse)(nil), // 135: vtctldata.CreateShardResponse
+ (*vtctldata.DeleteCellInfoResponse)(nil), // 136: vtctldata.DeleteCellInfoResponse
+ (*vtctldata.DeleteCellsAliasResponse)(nil), // 137: vtctldata.DeleteCellsAliasResponse
+ (*vtctldata.DeleteKeyspaceResponse)(nil), // 138: vtctldata.DeleteKeyspaceResponse
+ (*vtctldata.DeleteShardsResponse)(nil), // 139: vtctldata.DeleteShardsResponse
+ (*vtctldata.DeleteSrvVSchemaResponse)(nil), // 140: vtctldata.DeleteSrvVSchemaResponse
+ (*vtctldata.DeleteTabletsResponse)(nil), // 141: vtctldata.DeleteTabletsResponse
+ (*vtctldata.EmergencyReparentShardResponse)(nil), // 142: vtctldata.EmergencyReparentShardResponse
+ (*vtctldata.ExecuteFetchAsAppResponse)(nil), // 143: vtctldata.ExecuteFetchAsAppResponse
+ (*vtctldata.ExecuteFetchAsDBAResponse)(nil), // 144: vtctldata.ExecuteFetchAsDBAResponse
+ (*vtctldata.ExecuteHookResponse)(nil), // 145: vtctldata.ExecuteHookResponse
+ (*vtctldata.ExecuteMultiFetchAsDBAResponse)(nil), // 146: vtctldata.ExecuteMultiFetchAsDBAResponse
+ (*vtctldata.FindAllShardsInKeyspaceResponse)(nil), // 147: vtctldata.FindAllShardsInKeyspaceResponse
+ (*vtctldata.ForceCutOverSchemaMigrationResponse)(nil), // 148: vtctldata.ForceCutOverSchemaMigrationResponse
+ (*vtctldata.GetBackupsResponse)(nil), // 149: vtctldata.GetBackupsResponse
+ (*vtctldata.GetCellInfoResponse)(nil), // 150: vtctldata.GetCellInfoResponse
+ (*vtctldata.GetCellInfoNamesResponse)(nil), // 151: vtctldata.GetCellInfoNamesResponse
+ (*vtctldata.GetCellsAliasesResponse)(nil), // 152: vtctldata.GetCellsAliasesResponse
+ (*vtctldata.GetFullStatusResponse)(nil), // 153: vtctldata.GetFullStatusResponse
+ (*vtctldata.GetKeyspaceResponse)(nil), // 154: vtctldata.GetKeyspaceResponse
+ (*vtctldata.GetKeyspacesResponse)(nil), // 155: vtctldata.GetKeyspacesResponse
+ (*vtctldata.GetKeyspaceRoutingRulesResponse)(nil), // 156: vtctldata.GetKeyspaceRoutingRulesResponse
+ (*vtctldata.GetPermissionsResponse)(nil), // 157: vtctldata.GetPermissionsResponse
+ (*vtctldata.GetRoutingRulesResponse)(nil), // 158: vtctldata.GetRoutingRulesResponse
+ (*vtctldata.GetSchemaResponse)(nil), // 159: vtctldata.GetSchemaResponse
+ (*vtctldata.GetSchemaMigrationsResponse)(nil), // 160: vtctldata.GetSchemaMigrationsResponse
+ (*vtctldata.GetShardReplicationResponse)(nil), // 161: vtctldata.GetShardReplicationResponse
+ (*vtctldata.GetShardResponse)(nil), // 162: vtctldata.GetShardResponse
+ (*vtctldata.GetShardRoutingRulesResponse)(nil), // 163: vtctldata.GetShardRoutingRulesResponse
+ (*vtctldata.GetSrvKeyspaceNamesResponse)(nil), // 164: vtctldata.GetSrvKeyspaceNamesResponse
+ (*vtctldata.GetSrvKeyspacesResponse)(nil), // 165: vtctldata.GetSrvKeyspacesResponse
+ (*vtctldata.UpdateThrottlerConfigResponse)(nil), // 166: vtctldata.UpdateThrottlerConfigResponse
+ (*vtctldata.GetSrvVSchemaResponse)(nil), // 167: vtctldata.GetSrvVSchemaResponse
+ (*vtctldata.GetSrvVSchemasResponse)(nil), // 168: vtctldata.GetSrvVSchemasResponse
+ (*vtctldata.GetTabletResponse)(nil), // 169: vtctldata.GetTabletResponse
+ (*vtctldata.GetTabletsResponse)(nil), // 170: vtctldata.GetTabletsResponse
+ (*vtctldata.GetThrottlerStatusResponse)(nil), // 171: vtctldata.GetThrottlerStatusResponse
+ (*vtctldata.GetTopologyPathResponse)(nil), // 172: vtctldata.GetTopologyPathResponse
+ (*vtctldata.GetVersionResponse)(nil), // 173: vtctldata.GetVersionResponse
+ (*vtctldata.GetVSchemaResponse)(nil), // 174: vtctldata.GetVSchemaResponse
+ (*vtctldata.GetWorkflowsResponse)(nil), // 175: vtctldata.GetWorkflowsResponse
+ (*vtctldata.InitShardPrimaryResponse)(nil), // 176: vtctldata.InitShardPrimaryResponse
+ (*vtctldata.LaunchSchemaMigrationResponse)(nil), // 177: vtctldata.LaunchSchemaMigrationResponse
+ (*vtctldata.LookupVindexCreateResponse)(nil), // 178: vtctldata.LookupVindexCreateResponse
+ (*vtctldata.LookupVindexExternalizeResponse)(nil), // 179: vtctldata.LookupVindexExternalizeResponse
+ (*vtctldata.MaterializeCreateResponse)(nil), // 180: vtctldata.MaterializeCreateResponse
+ (*vtctldata.WorkflowStatusResponse)(nil), // 181: vtctldata.WorkflowStatusResponse
+ (*vtctldata.MountRegisterResponse)(nil), // 182: vtctldata.MountRegisterResponse
+ (*vtctldata.MountUnregisterResponse)(nil), // 183: vtctldata.MountUnregisterResponse
+ (*vtctldata.MountShowResponse)(nil), // 184: vtctldata.MountShowResponse
+ (*vtctldata.MountListResponse)(nil), // 185: vtctldata.MountListResponse
+ (*vtctldata.MoveTablesCompleteResponse)(nil), // 186: vtctldata.MoveTablesCompleteResponse
+ (*vtctldata.PingTabletResponse)(nil), // 187: vtctldata.PingTabletResponse
+ (*vtctldata.PlannedReparentShardResponse)(nil), // 188: vtctldata.PlannedReparentShardResponse
+ (*vtctldata.RebuildKeyspaceGraphResponse)(nil), // 189: vtctldata.RebuildKeyspaceGraphResponse
+ (*vtctldata.RebuildVSchemaGraphResponse)(nil), // 190: vtctldata.RebuildVSchemaGraphResponse
+ (*vtctldata.RefreshStateResponse)(nil), // 191: vtctldata.RefreshStateResponse
+ (*vtctldata.RefreshStateByShardResponse)(nil), // 192: vtctldata.RefreshStateByShardResponse
+ (*vtctldata.ReloadSchemaResponse)(nil), // 193: vtctldata.ReloadSchemaResponse
+ (*vtctldata.ReloadSchemaKeyspaceResponse)(nil), // 194: vtctldata.ReloadSchemaKeyspaceResponse
+ (*vtctldata.ReloadSchemaShardResponse)(nil), // 195: vtctldata.ReloadSchemaShardResponse
+ (*vtctldata.RemoveBackupResponse)(nil), // 196: vtctldata.RemoveBackupResponse
+ (*vtctldata.RemoveKeyspaceCellResponse)(nil), // 197: vtctldata.RemoveKeyspaceCellResponse
+ (*vtctldata.RemoveShardCellResponse)(nil), // 198: vtctldata.RemoveShardCellResponse
+ (*vtctldata.ReparentTabletResponse)(nil), // 199: vtctldata.ReparentTabletResponse
+ (*vtctldata.RestoreFromBackupResponse)(nil), // 200: vtctldata.RestoreFromBackupResponse
+ (*vtctldata.RetrySchemaMigrationResponse)(nil), // 201: vtctldata.RetrySchemaMigrationResponse
+ (*vtctldata.RunHealthCheckResponse)(nil), // 202: vtctldata.RunHealthCheckResponse
+ (*vtctldata.SetKeyspaceDurabilityPolicyResponse)(nil), // 203: vtctldata.SetKeyspaceDurabilityPolicyResponse
+ (*vtctldata.SetShardIsPrimaryServingResponse)(nil), // 204: vtctldata.SetShardIsPrimaryServingResponse
+ (*vtctldata.SetShardTabletControlResponse)(nil), // 205: vtctldata.SetShardTabletControlResponse
+ (*vtctldata.SetWritableResponse)(nil), // 206: vtctldata.SetWritableResponse
+ (*vtctldata.ShardReplicationAddResponse)(nil), // 207: vtctldata.ShardReplicationAddResponse
+ (*vtctldata.ShardReplicationFixResponse)(nil), // 208: vtctldata.ShardReplicationFixResponse
+ (*vtctldata.ShardReplicationPositionsResponse)(nil), // 209: vtctldata.ShardReplicationPositionsResponse
+ (*vtctldata.ShardReplicationRemoveResponse)(nil), // 210: vtctldata.ShardReplicationRemoveResponse
+ (*vtctldata.SleepTabletResponse)(nil), // 211: vtctldata.SleepTabletResponse
+ (*vtctldata.SourceShardAddResponse)(nil), // 212: vtctldata.SourceShardAddResponse
+ (*vtctldata.SourceShardDeleteResponse)(nil), // 213: vtctldata.SourceShardDeleteResponse
+ (*vtctldata.StartReplicationResponse)(nil), // 214: vtctldata.StartReplicationResponse
+ (*vtctldata.StopReplicationResponse)(nil), // 215: vtctldata.StopReplicationResponse
+ (*vtctldata.TabletExternallyReparentedResponse)(nil), // 216: vtctldata.TabletExternallyReparentedResponse
+ (*vtctldata.UpdateCellInfoResponse)(nil), // 217: vtctldata.UpdateCellInfoResponse
+ (*vtctldata.UpdateCellsAliasResponse)(nil), // 218: vtctldata.UpdateCellsAliasResponse
+ (*vtctldata.ValidateResponse)(nil), // 219: vtctldata.ValidateResponse
+ (*vtctldata.ValidateKeyspaceResponse)(nil), // 220: vtctldata.ValidateKeyspaceResponse
+ (*vtctldata.ValidateSchemaKeyspaceResponse)(nil), // 221: vtctldata.ValidateSchemaKeyspaceResponse
+ (*vtctldata.ValidateShardResponse)(nil), // 222: vtctldata.ValidateShardResponse
+ (*vtctldata.ValidateVersionKeyspaceResponse)(nil), // 223: vtctldata.ValidateVersionKeyspaceResponse
+ (*vtctldata.ValidateVersionShardResponse)(nil), // 224: vtctldata.ValidateVersionShardResponse
+ (*vtctldata.ValidateVSchemaResponse)(nil), // 225: vtctldata.ValidateVSchemaResponse
+ (*vtctldata.VDiffCreateResponse)(nil), // 226: vtctldata.VDiffCreateResponse
+ (*vtctldata.VDiffDeleteResponse)(nil), // 227: vtctldata.VDiffDeleteResponse
+ (*vtctldata.VDiffResumeResponse)(nil), // 228: vtctldata.VDiffResumeResponse
+ (*vtctldata.VDiffShowResponse)(nil), // 229: vtctldata.VDiffShowResponse
+ (*vtctldata.VDiffStopResponse)(nil), // 230: vtctldata.VDiffStopResponse
+ (*vtctldata.WorkflowDeleteResponse)(nil), // 231: vtctldata.WorkflowDeleteResponse
+ (*vtctldata.WorkflowSwitchTrafficResponse)(nil), // 232: vtctldata.WorkflowSwitchTrafficResponse
+ (*vtctldata.WorkflowUpdateResponse)(nil), // 233: vtctldata.WorkflowUpdateResponse
+ (*vtctldata.GetMirrorRulesResponse)(nil), // 234: vtctldata.GetMirrorRulesResponse
+ (*vtctldata.WorkflowMirrorTrafficResponse)(nil), // 235: vtctldata.WorkflowMirrorTrafficResponse
}
var file_vtctlservice_proto_depIdxs = []int32{
0, // 0: vtctlservice.Vtctl.ExecuteVtctlCommand:input_type -> vtctldata.ExecuteVtctlCommandRequest
@@ -1100,126 +1116,130 @@ var file_vtctlservice_proto_depIdxs = []int32{
115, // 115: vtctlservice.Vtctld.WorkflowStatus:input_type -> vtctldata.WorkflowStatusRequest
116, // 116: vtctlservice.Vtctld.WorkflowSwitchTraffic:input_type -> vtctldata.WorkflowSwitchTrafficRequest
117, // 117: vtctlservice.Vtctld.WorkflowUpdate:input_type -> vtctldata.WorkflowUpdateRequest
- 118, // 118: vtctlservice.Vtctl.ExecuteVtctlCommand:output_type -> vtctldata.ExecuteVtctlCommandResponse
- 119, // 119: vtctlservice.Vtctld.AddCellInfo:output_type -> vtctldata.AddCellInfoResponse
- 120, // 120: vtctlservice.Vtctld.AddCellsAlias:output_type -> vtctldata.AddCellsAliasResponse
- 121, // 121: vtctlservice.Vtctld.ApplyRoutingRules:output_type -> vtctldata.ApplyRoutingRulesResponse
- 122, // 122: vtctlservice.Vtctld.ApplySchema:output_type -> vtctldata.ApplySchemaResponse
- 123, // 123: vtctlservice.Vtctld.ApplyKeyspaceRoutingRules:output_type -> vtctldata.ApplyKeyspaceRoutingRulesResponse
- 124, // 124: vtctlservice.Vtctld.ApplyShardRoutingRules:output_type -> vtctldata.ApplyShardRoutingRulesResponse
- 125, // 125: vtctlservice.Vtctld.ApplyVSchema:output_type -> vtctldata.ApplyVSchemaResponse
- 126, // 126: vtctlservice.Vtctld.Backup:output_type -> vtctldata.BackupResponse
- 126, // 127: vtctlservice.Vtctld.BackupShard:output_type -> vtctldata.BackupResponse
- 127, // 128: vtctlservice.Vtctld.CancelSchemaMigration:output_type -> vtctldata.CancelSchemaMigrationResponse
- 128, // 129: vtctlservice.Vtctld.ChangeTabletType:output_type -> vtctldata.ChangeTabletTypeResponse
- 129, // 130: vtctlservice.Vtctld.CheckThrottler:output_type -> vtctldata.CheckThrottlerResponse
- 130, // 131: vtctlservice.Vtctld.CleanupSchemaMigration:output_type -> vtctldata.CleanupSchemaMigrationResponse
- 131, // 132: vtctlservice.Vtctld.CompleteSchemaMigration:output_type -> vtctldata.CompleteSchemaMigrationResponse
- 132, // 133: vtctlservice.Vtctld.CreateKeyspace:output_type -> vtctldata.CreateKeyspaceResponse
- 133, // 134: vtctlservice.Vtctld.CreateShard:output_type -> vtctldata.CreateShardResponse
- 134, // 135: vtctlservice.Vtctld.DeleteCellInfo:output_type -> vtctldata.DeleteCellInfoResponse
- 135, // 136: vtctlservice.Vtctld.DeleteCellsAlias:output_type -> vtctldata.DeleteCellsAliasResponse
- 136, // 137: vtctlservice.Vtctld.DeleteKeyspace:output_type -> vtctldata.DeleteKeyspaceResponse
- 137, // 138: vtctlservice.Vtctld.DeleteShards:output_type -> vtctldata.DeleteShardsResponse
- 138, // 139: vtctlservice.Vtctld.DeleteSrvVSchema:output_type -> vtctldata.DeleteSrvVSchemaResponse
- 139, // 140: vtctlservice.Vtctld.DeleteTablets:output_type -> vtctldata.DeleteTabletsResponse
- 140, // 141: vtctlservice.Vtctld.EmergencyReparentShard:output_type -> vtctldata.EmergencyReparentShardResponse
- 141, // 142: vtctlservice.Vtctld.ExecuteFetchAsApp:output_type -> vtctldata.ExecuteFetchAsAppResponse
- 142, // 143: vtctlservice.Vtctld.ExecuteFetchAsDBA:output_type -> vtctldata.ExecuteFetchAsDBAResponse
- 143, // 144: vtctlservice.Vtctld.ExecuteHook:output_type -> vtctldata.ExecuteHookResponse
- 144, // 145: vtctlservice.Vtctld.ExecuteMultiFetchAsDBA:output_type -> vtctldata.ExecuteMultiFetchAsDBAResponse
- 145, // 146: vtctlservice.Vtctld.FindAllShardsInKeyspace:output_type -> vtctldata.FindAllShardsInKeyspaceResponse
- 146, // 147: vtctlservice.Vtctld.ForceCutOverSchemaMigration:output_type -> vtctldata.ForceCutOverSchemaMigrationResponse
- 147, // 148: vtctlservice.Vtctld.GetBackups:output_type -> vtctldata.GetBackupsResponse
- 148, // 149: vtctlservice.Vtctld.GetCellInfo:output_type -> vtctldata.GetCellInfoResponse
- 149, // 150: vtctlservice.Vtctld.GetCellInfoNames:output_type -> vtctldata.GetCellInfoNamesResponse
- 150, // 151: vtctlservice.Vtctld.GetCellsAliases:output_type -> vtctldata.GetCellsAliasesResponse
- 151, // 152: vtctlservice.Vtctld.GetFullStatus:output_type -> vtctldata.GetFullStatusResponse
- 152, // 153: vtctlservice.Vtctld.GetKeyspace:output_type -> vtctldata.GetKeyspaceResponse
- 153, // 154: vtctlservice.Vtctld.GetKeyspaces:output_type -> vtctldata.GetKeyspacesResponse
- 154, // 155: vtctlservice.Vtctld.GetKeyspaceRoutingRules:output_type -> vtctldata.GetKeyspaceRoutingRulesResponse
- 155, // 156: vtctlservice.Vtctld.GetPermissions:output_type -> vtctldata.GetPermissionsResponse
- 156, // 157: vtctlservice.Vtctld.GetRoutingRules:output_type -> vtctldata.GetRoutingRulesResponse
- 157, // 158: vtctlservice.Vtctld.GetSchema:output_type -> vtctldata.GetSchemaResponse
- 158, // 159: vtctlservice.Vtctld.GetSchemaMigrations:output_type -> vtctldata.GetSchemaMigrationsResponse
- 159, // 160: vtctlservice.Vtctld.GetShardReplication:output_type -> vtctldata.GetShardReplicationResponse
- 160, // 161: vtctlservice.Vtctld.GetShard:output_type -> vtctldata.GetShardResponse
- 161, // 162: vtctlservice.Vtctld.GetShardRoutingRules:output_type -> vtctldata.GetShardRoutingRulesResponse
- 162, // 163: vtctlservice.Vtctld.GetSrvKeyspaceNames:output_type -> vtctldata.GetSrvKeyspaceNamesResponse
- 163, // 164: vtctlservice.Vtctld.GetSrvKeyspaces:output_type -> vtctldata.GetSrvKeyspacesResponse
- 164, // 165: vtctlservice.Vtctld.UpdateThrottlerConfig:output_type -> vtctldata.UpdateThrottlerConfigResponse
- 165, // 166: vtctlservice.Vtctld.GetSrvVSchema:output_type -> vtctldata.GetSrvVSchemaResponse
- 166, // 167: vtctlservice.Vtctld.GetSrvVSchemas:output_type -> vtctldata.GetSrvVSchemasResponse
- 167, // 168: vtctlservice.Vtctld.GetTablet:output_type -> vtctldata.GetTabletResponse
- 168, // 169: vtctlservice.Vtctld.GetTablets:output_type -> vtctldata.GetTabletsResponse
- 169, // 170: vtctlservice.Vtctld.GetThrottlerStatus:output_type -> vtctldata.GetThrottlerStatusResponse
- 170, // 171: vtctlservice.Vtctld.GetTopologyPath:output_type -> vtctldata.GetTopologyPathResponse
- 171, // 172: vtctlservice.Vtctld.GetVersion:output_type -> vtctldata.GetVersionResponse
- 172, // 173: vtctlservice.Vtctld.GetVSchema:output_type -> vtctldata.GetVSchemaResponse
- 173, // 174: vtctlservice.Vtctld.GetWorkflows:output_type -> vtctldata.GetWorkflowsResponse
- 174, // 175: vtctlservice.Vtctld.InitShardPrimary:output_type -> vtctldata.InitShardPrimaryResponse
- 175, // 176: vtctlservice.Vtctld.LaunchSchemaMigration:output_type -> vtctldata.LaunchSchemaMigrationResponse
- 176, // 177: vtctlservice.Vtctld.LookupVindexCreate:output_type -> vtctldata.LookupVindexCreateResponse
- 177, // 178: vtctlservice.Vtctld.LookupVindexExternalize:output_type -> vtctldata.LookupVindexExternalizeResponse
- 178, // 179: vtctlservice.Vtctld.MaterializeCreate:output_type -> vtctldata.MaterializeCreateResponse
- 179, // 180: vtctlservice.Vtctld.MigrateCreate:output_type -> vtctldata.WorkflowStatusResponse
- 180, // 181: vtctlservice.Vtctld.MountRegister:output_type -> vtctldata.MountRegisterResponse
- 181, // 182: vtctlservice.Vtctld.MountUnregister:output_type -> vtctldata.MountUnregisterResponse
- 182, // 183: vtctlservice.Vtctld.MountShow:output_type -> vtctldata.MountShowResponse
- 183, // 184: vtctlservice.Vtctld.MountList:output_type -> vtctldata.MountListResponse
- 179, // 185: vtctlservice.Vtctld.MoveTablesCreate:output_type -> vtctldata.WorkflowStatusResponse
- 184, // 186: vtctlservice.Vtctld.MoveTablesComplete:output_type -> vtctldata.MoveTablesCompleteResponse
- 185, // 187: vtctlservice.Vtctld.PingTablet:output_type -> vtctldata.PingTabletResponse
- 186, // 188: vtctlservice.Vtctld.PlannedReparentShard:output_type -> vtctldata.PlannedReparentShardResponse
- 187, // 189: vtctlservice.Vtctld.RebuildKeyspaceGraph:output_type -> vtctldata.RebuildKeyspaceGraphResponse
- 188, // 190: vtctlservice.Vtctld.RebuildVSchemaGraph:output_type -> vtctldata.RebuildVSchemaGraphResponse
- 189, // 191: vtctlservice.Vtctld.RefreshState:output_type -> vtctldata.RefreshStateResponse
- 190, // 192: vtctlservice.Vtctld.RefreshStateByShard:output_type -> vtctldata.RefreshStateByShardResponse
- 191, // 193: vtctlservice.Vtctld.ReloadSchema:output_type -> vtctldata.ReloadSchemaResponse
- 192, // 194: vtctlservice.Vtctld.ReloadSchemaKeyspace:output_type -> vtctldata.ReloadSchemaKeyspaceResponse
- 193, // 195: vtctlservice.Vtctld.ReloadSchemaShard:output_type -> vtctldata.ReloadSchemaShardResponse
- 194, // 196: vtctlservice.Vtctld.RemoveBackup:output_type -> vtctldata.RemoveBackupResponse
- 195, // 197: vtctlservice.Vtctld.RemoveKeyspaceCell:output_type -> vtctldata.RemoveKeyspaceCellResponse
- 196, // 198: vtctlservice.Vtctld.RemoveShardCell:output_type -> vtctldata.RemoveShardCellResponse
- 197, // 199: vtctlservice.Vtctld.ReparentTablet:output_type -> vtctldata.ReparentTabletResponse
- 179, // 200: vtctlservice.Vtctld.ReshardCreate:output_type -> vtctldata.WorkflowStatusResponse
- 198, // 201: vtctlservice.Vtctld.RestoreFromBackup:output_type -> vtctldata.RestoreFromBackupResponse
- 199, // 202: vtctlservice.Vtctld.RetrySchemaMigration:output_type -> vtctldata.RetrySchemaMigrationResponse
- 200, // 203: vtctlservice.Vtctld.RunHealthCheck:output_type -> vtctldata.RunHealthCheckResponse
- 201, // 204: vtctlservice.Vtctld.SetKeyspaceDurabilityPolicy:output_type -> vtctldata.SetKeyspaceDurabilityPolicyResponse
- 202, // 205: vtctlservice.Vtctld.SetShardIsPrimaryServing:output_type -> vtctldata.SetShardIsPrimaryServingResponse
- 203, // 206: vtctlservice.Vtctld.SetShardTabletControl:output_type -> vtctldata.SetShardTabletControlResponse
- 204, // 207: vtctlservice.Vtctld.SetWritable:output_type -> vtctldata.SetWritableResponse
- 205, // 208: vtctlservice.Vtctld.ShardReplicationAdd:output_type -> vtctldata.ShardReplicationAddResponse
- 206, // 209: vtctlservice.Vtctld.ShardReplicationFix:output_type -> vtctldata.ShardReplicationFixResponse
- 207, // 210: vtctlservice.Vtctld.ShardReplicationPositions:output_type -> vtctldata.ShardReplicationPositionsResponse
- 208, // 211: vtctlservice.Vtctld.ShardReplicationRemove:output_type -> vtctldata.ShardReplicationRemoveResponse
- 209, // 212: vtctlservice.Vtctld.SleepTablet:output_type -> vtctldata.SleepTabletResponse
- 210, // 213: vtctlservice.Vtctld.SourceShardAdd:output_type -> vtctldata.SourceShardAddResponse
- 211, // 214: vtctlservice.Vtctld.SourceShardDelete:output_type -> vtctldata.SourceShardDeleteResponse
- 212, // 215: vtctlservice.Vtctld.StartReplication:output_type -> vtctldata.StartReplicationResponse
- 213, // 216: vtctlservice.Vtctld.StopReplication:output_type -> vtctldata.StopReplicationResponse
- 214, // 217: vtctlservice.Vtctld.TabletExternallyReparented:output_type -> vtctldata.TabletExternallyReparentedResponse
- 215, // 218: vtctlservice.Vtctld.UpdateCellInfo:output_type -> vtctldata.UpdateCellInfoResponse
- 216, // 219: vtctlservice.Vtctld.UpdateCellsAlias:output_type -> vtctldata.UpdateCellsAliasResponse
- 217, // 220: vtctlservice.Vtctld.Validate:output_type -> vtctldata.ValidateResponse
- 218, // 221: vtctlservice.Vtctld.ValidateKeyspace:output_type -> vtctldata.ValidateKeyspaceResponse
- 219, // 222: vtctlservice.Vtctld.ValidateSchemaKeyspace:output_type -> vtctldata.ValidateSchemaKeyspaceResponse
- 220, // 223: vtctlservice.Vtctld.ValidateShard:output_type -> vtctldata.ValidateShardResponse
- 221, // 224: vtctlservice.Vtctld.ValidateVersionKeyspace:output_type -> vtctldata.ValidateVersionKeyspaceResponse
- 222, // 225: vtctlservice.Vtctld.ValidateVersionShard:output_type -> vtctldata.ValidateVersionShardResponse
- 223, // 226: vtctlservice.Vtctld.ValidateVSchema:output_type -> vtctldata.ValidateVSchemaResponse
- 224, // 227: vtctlservice.Vtctld.VDiffCreate:output_type -> vtctldata.VDiffCreateResponse
- 225, // 228: vtctlservice.Vtctld.VDiffDelete:output_type -> vtctldata.VDiffDeleteResponse
- 226, // 229: vtctlservice.Vtctld.VDiffResume:output_type -> vtctldata.VDiffResumeResponse
- 227, // 230: vtctlservice.Vtctld.VDiffShow:output_type -> vtctldata.VDiffShowResponse
- 228, // 231: vtctlservice.Vtctld.VDiffStop:output_type -> vtctldata.VDiffStopResponse
- 229, // 232: vtctlservice.Vtctld.WorkflowDelete:output_type -> vtctldata.WorkflowDeleteResponse
- 179, // 233: vtctlservice.Vtctld.WorkflowStatus:output_type -> vtctldata.WorkflowStatusResponse
- 230, // 234: vtctlservice.Vtctld.WorkflowSwitchTraffic:output_type -> vtctldata.WorkflowSwitchTrafficResponse
- 231, // 235: vtctlservice.Vtctld.WorkflowUpdate:output_type -> vtctldata.WorkflowUpdateResponse
- 118, // [118:236] is the sub-list for method output_type
- 0, // [0:118] is the sub-list for method input_type
+ 118, // 118: vtctlservice.Vtctld.GetMirrorRules:input_type -> vtctldata.GetMirrorRulesRequest
+ 119, // 119: vtctlservice.Vtctld.WorkflowMirrorTraffic:input_type -> vtctldata.WorkflowMirrorTrafficRequest
+ 120, // 120: vtctlservice.Vtctl.ExecuteVtctlCommand:output_type -> vtctldata.ExecuteVtctlCommandResponse
+ 121, // 121: vtctlservice.Vtctld.AddCellInfo:output_type -> vtctldata.AddCellInfoResponse
+ 122, // 122: vtctlservice.Vtctld.AddCellsAlias:output_type -> vtctldata.AddCellsAliasResponse
+ 123, // 123: vtctlservice.Vtctld.ApplyRoutingRules:output_type -> vtctldata.ApplyRoutingRulesResponse
+ 124, // 124: vtctlservice.Vtctld.ApplySchema:output_type -> vtctldata.ApplySchemaResponse
+ 125, // 125: vtctlservice.Vtctld.ApplyKeyspaceRoutingRules:output_type -> vtctldata.ApplyKeyspaceRoutingRulesResponse
+ 126, // 126: vtctlservice.Vtctld.ApplyShardRoutingRules:output_type -> vtctldata.ApplyShardRoutingRulesResponse
+ 127, // 127: vtctlservice.Vtctld.ApplyVSchema:output_type -> vtctldata.ApplyVSchemaResponse
+ 128, // 128: vtctlservice.Vtctld.Backup:output_type -> vtctldata.BackupResponse
+ 128, // 129: vtctlservice.Vtctld.BackupShard:output_type -> vtctldata.BackupResponse
+ 129, // 130: vtctlservice.Vtctld.CancelSchemaMigration:output_type -> vtctldata.CancelSchemaMigrationResponse
+ 130, // 131: vtctlservice.Vtctld.ChangeTabletType:output_type -> vtctldata.ChangeTabletTypeResponse
+ 131, // 132: vtctlservice.Vtctld.CheckThrottler:output_type -> vtctldata.CheckThrottlerResponse
+ 132, // 133: vtctlservice.Vtctld.CleanupSchemaMigration:output_type -> vtctldata.CleanupSchemaMigrationResponse
+ 133, // 134: vtctlservice.Vtctld.CompleteSchemaMigration:output_type -> vtctldata.CompleteSchemaMigrationResponse
+ 134, // 135: vtctlservice.Vtctld.CreateKeyspace:output_type -> vtctldata.CreateKeyspaceResponse
+ 135, // 136: vtctlservice.Vtctld.CreateShard:output_type -> vtctldata.CreateShardResponse
+ 136, // 137: vtctlservice.Vtctld.DeleteCellInfo:output_type -> vtctldata.DeleteCellInfoResponse
+ 137, // 138: vtctlservice.Vtctld.DeleteCellsAlias:output_type -> vtctldata.DeleteCellsAliasResponse
+ 138, // 139: vtctlservice.Vtctld.DeleteKeyspace:output_type -> vtctldata.DeleteKeyspaceResponse
+ 139, // 140: vtctlservice.Vtctld.DeleteShards:output_type -> vtctldata.DeleteShardsResponse
+ 140, // 141: vtctlservice.Vtctld.DeleteSrvVSchema:output_type -> vtctldata.DeleteSrvVSchemaResponse
+ 141, // 142: vtctlservice.Vtctld.DeleteTablets:output_type -> vtctldata.DeleteTabletsResponse
+ 142, // 143: vtctlservice.Vtctld.EmergencyReparentShard:output_type -> vtctldata.EmergencyReparentShardResponse
+ 143, // 144: vtctlservice.Vtctld.ExecuteFetchAsApp:output_type -> vtctldata.ExecuteFetchAsAppResponse
+ 144, // 145: vtctlservice.Vtctld.ExecuteFetchAsDBA:output_type -> vtctldata.ExecuteFetchAsDBAResponse
+ 145, // 146: vtctlservice.Vtctld.ExecuteHook:output_type -> vtctldata.ExecuteHookResponse
+ 146, // 147: vtctlservice.Vtctld.ExecuteMultiFetchAsDBA:output_type -> vtctldata.ExecuteMultiFetchAsDBAResponse
+ 147, // 148: vtctlservice.Vtctld.FindAllShardsInKeyspace:output_type -> vtctldata.FindAllShardsInKeyspaceResponse
+ 148, // 149: vtctlservice.Vtctld.ForceCutOverSchemaMigration:output_type -> vtctldata.ForceCutOverSchemaMigrationResponse
+ 149, // 150: vtctlservice.Vtctld.GetBackups:output_type -> vtctldata.GetBackupsResponse
+ 150, // 151: vtctlservice.Vtctld.GetCellInfo:output_type -> vtctldata.GetCellInfoResponse
+ 151, // 152: vtctlservice.Vtctld.GetCellInfoNames:output_type -> vtctldata.GetCellInfoNamesResponse
+ 152, // 153: vtctlservice.Vtctld.GetCellsAliases:output_type -> vtctldata.GetCellsAliasesResponse
+ 153, // 154: vtctlservice.Vtctld.GetFullStatus:output_type -> vtctldata.GetFullStatusResponse
+ 154, // 155: vtctlservice.Vtctld.GetKeyspace:output_type -> vtctldata.GetKeyspaceResponse
+ 155, // 156: vtctlservice.Vtctld.GetKeyspaces:output_type -> vtctldata.GetKeyspacesResponse
+ 156, // 157: vtctlservice.Vtctld.GetKeyspaceRoutingRules:output_type -> vtctldata.GetKeyspaceRoutingRulesResponse
+ 157, // 158: vtctlservice.Vtctld.GetPermissions:output_type -> vtctldata.GetPermissionsResponse
+ 158, // 159: vtctlservice.Vtctld.GetRoutingRules:output_type -> vtctldata.GetRoutingRulesResponse
+ 159, // 160: vtctlservice.Vtctld.GetSchema:output_type -> vtctldata.GetSchemaResponse
+ 160, // 161: vtctlservice.Vtctld.GetSchemaMigrations:output_type -> vtctldata.GetSchemaMigrationsResponse
+ 161, // 162: vtctlservice.Vtctld.GetShardReplication:output_type -> vtctldata.GetShardReplicationResponse
+ 162, // 163: vtctlservice.Vtctld.GetShard:output_type -> vtctldata.GetShardResponse
+ 163, // 164: vtctlservice.Vtctld.GetShardRoutingRules:output_type -> vtctldata.GetShardRoutingRulesResponse
+ 164, // 165: vtctlservice.Vtctld.GetSrvKeyspaceNames:output_type -> vtctldata.GetSrvKeyspaceNamesResponse
+ 165, // 166: vtctlservice.Vtctld.GetSrvKeyspaces:output_type -> vtctldata.GetSrvKeyspacesResponse
+ 166, // 167: vtctlservice.Vtctld.UpdateThrottlerConfig:output_type -> vtctldata.UpdateThrottlerConfigResponse
+ 167, // 168: vtctlservice.Vtctld.GetSrvVSchema:output_type -> vtctldata.GetSrvVSchemaResponse
+ 168, // 169: vtctlservice.Vtctld.GetSrvVSchemas:output_type -> vtctldata.GetSrvVSchemasResponse
+ 169, // 170: vtctlservice.Vtctld.GetTablet:output_type -> vtctldata.GetTabletResponse
+ 170, // 171: vtctlservice.Vtctld.GetTablets:output_type -> vtctldata.GetTabletsResponse
+ 171, // 172: vtctlservice.Vtctld.GetThrottlerStatus:output_type -> vtctldata.GetThrottlerStatusResponse
+ 172, // 173: vtctlservice.Vtctld.GetTopologyPath:output_type -> vtctldata.GetTopologyPathResponse
+ 173, // 174: vtctlservice.Vtctld.GetVersion:output_type -> vtctldata.GetVersionResponse
+ 174, // 175: vtctlservice.Vtctld.GetVSchema:output_type -> vtctldata.GetVSchemaResponse
+ 175, // 176: vtctlservice.Vtctld.GetWorkflows:output_type -> vtctldata.GetWorkflowsResponse
+ 176, // 177: vtctlservice.Vtctld.InitShardPrimary:output_type -> vtctldata.InitShardPrimaryResponse
+ 177, // 178: vtctlservice.Vtctld.LaunchSchemaMigration:output_type -> vtctldata.LaunchSchemaMigrationResponse
+ 178, // 179: vtctlservice.Vtctld.LookupVindexCreate:output_type -> vtctldata.LookupVindexCreateResponse
+ 179, // 180: vtctlservice.Vtctld.LookupVindexExternalize:output_type -> vtctldata.LookupVindexExternalizeResponse
+ 180, // 181: vtctlservice.Vtctld.MaterializeCreate:output_type -> vtctldata.MaterializeCreateResponse
+ 181, // 182: vtctlservice.Vtctld.MigrateCreate:output_type -> vtctldata.WorkflowStatusResponse
+ 182, // 183: vtctlservice.Vtctld.MountRegister:output_type -> vtctldata.MountRegisterResponse
+ 183, // 184: vtctlservice.Vtctld.MountUnregister:output_type -> vtctldata.MountUnregisterResponse
+ 184, // 185: vtctlservice.Vtctld.MountShow:output_type -> vtctldata.MountShowResponse
+ 185, // 186: vtctlservice.Vtctld.MountList:output_type -> vtctldata.MountListResponse
+ 181, // 187: vtctlservice.Vtctld.MoveTablesCreate:output_type -> vtctldata.WorkflowStatusResponse
+ 186, // 188: vtctlservice.Vtctld.MoveTablesComplete:output_type -> vtctldata.MoveTablesCompleteResponse
+ 187, // 189: vtctlservice.Vtctld.PingTablet:output_type -> vtctldata.PingTabletResponse
+ 188, // 190: vtctlservice.Vtctld.PlannedReparentShard:output_type -> vtctldata.PlannedReparentShardResponse
+ 189, // 191: vtctlservice.Vtctld.RebuildKeyspaceGraph:output_type -> vtctldata.RebuildKeyspaceGraphResponse
+ 190, // 192: vtctlservice.Vtctld.RebuildVSchemaGraph:output_type -> vtctldata.RebuildVSchemaGraphResponse
+ 191, // 193: vtctlservice.Vtctld.RefreshState:output_type -> vtctldata.RefreshStateResponse
+ 192, // 194: vtctlservice.Vtctld.RefreshStateByShard:output_type -> vtctldata.RefreshStateByShardResponse
+ 193, // 195: vtctlservice.Vtctld.ReloadSchema:output_type -> vtctldata.ReloadSchemaResponse
+ 194, // 196: vtctlservice.Vtctld.ReloadSchemaKeyspace:output_type -> vtctldata.ReloadSchemaKeyspaceResponse
+ 195, // 197: vtctlservice.Vtctld.ReloadSchemaShard:output_type -> vtctldata.ReloadSchemaShardResponse
+ 196, // 198: vtctlservice.Vtctld.RemoveBackup:output_type -> vtctldata.RemoveBackupResponse
+ 197, // 199: vtctlservice.Vtctld.RemoveKeyspaceCell:output_type -> vtctldata.RemoveKeyspaceCellResponse
+ 198, // 200: vtctlservice.Vtctld.RemoveShardCell:output_type -> vtctldata.RemoveShardCellResponse
+ 199, // 201: vtctlservice.Vtctld.ReparentTablet:output_type -> vtctldata.ReparentTabletResponse
+ 181, // 202: vtctlservice.Vtctld.ReshardCreate:output_type -> vtctldata.WorkflowStatusResponse
+ 200, // 203: vtctlservice.Vtctld.RestoreFromBackup:output_type -> vtctldata.RestoreFromBackupResponse
+ 201, // 204: vtctlservice.Vtctld.RetrySchemaMigration:output_type -> vtctldata.RetrySchemaMigrationResponse
+ 202, // 205: vtctlservice.Vtctld.RunHealthCheck:output_type -> vtctldata.RunHealthCheckResponse
+ 203, // 206: vtctlservice.Vtctld.SetKeyspaceDurabilityPolicy:output_type -> vtctldata.SetKeyspaceDurabilityPolicyResponse
+ 204, // 207: vtctlservice.Vtctld.SetShardIsPrimaryServing:output_type -> vtctldata.SetShardIsPrimaryServingResponse
+ 205, // 208: vtctlservice.Vtctld.SetShardTabletControl:output_type -> vtctldata.SetShardTabletControlResponse
+ 206, // 209: vtctlservice.Vtctld.SetWritable:output_type -> vtctldata.SetWritableResponse
+ 207, // 210: vtctlservice.Vtctld.ShardReplicationAdd:output_type -> vtctldata.ShardReplicationAddResponse
+ 208, // 211: vtctlservice.Vtctld.ShardReplicationFix:output_type -> vtctldata.ShardReplicationFixResponse
+ 209, // 212: vtctlservice.Vtctld.ShardReplicationPositions:output_type -> vtctldata.ShardReplicationPositionsResponse
+ 210, // 213: vtctlservice.Vtctld.ShardReplicationRemove:output_type -> vtctldata.ShardReplicationRemoveResponse
+ 211, // 214: vtctlservice.Vtctld.SleepTablet:output_type -> vtctldata.SleepTabletResponse
+ 212, // 215: vtctlservice.Vtctld.SourceShardAdd:output_type -> vtctldata.SourceShardAddResponse
+ 213, // 216: vtctlservice.Vtctld.SourceShardDelete:output_type -> vtctldata.SourceShardDeleteResponse
+ 214, // 217: vtctlservice.Vtctld.StartReplication:output_type -> vtctldata.StartReplicationResponse
+ 215, // 218: vtctlservice.Vtctld.StopReplication:output_type -> vtctldata.StopReplicationResponse
+ 216, // 219: vtctlservice.Vtctld.TabletExternallyReparented:output_type -> vtctldata.TabletExternallyReparentedResponse
+ 217, // 220: vtctlservice.Vtctld.UpdateCellInfo:output_type -> vtctldata.UpdateCellInfoResponse
+ 218, // 221: vtctlservice.Vtctld.UpdateCellsAlias:output_type -> vtctldata.UpdateCellsAliasResponse
+ 219, // 222: vtctlservice.Vtctld.Validate:output_type -> vtctldata.ValidateResponse
+ 220, // 223: vtctlservice.Vtctld.ValidateKeyspace:output_type -> vtctldata.ValidateKeyspaceResponse
+ 221, // 224: vtctlservice.Vtctld.ValidateSchemaKeyspace:output_type -> vtctldata.ValidateSchemaKeyspaceResponse
+ 222, // 225: vtctlservice.Vtctld.ValidateShard:output_type -> vtctldata.ValidateShardResponse
+ 223, // 226: vtctlservice.Vtctld.ValidateVersionKeyspace:output_type -> vtctldata.ValidateVersionKeyspaceResponse
+ 224, // 227: vtctlservice.Vtctld.ValidateVersionShard:output_type -> vtctldata.ValidateVersionShardResponse
+ 225, // 228: vtctlservice.Vtctld.ValidateVSchema:output_type -> vtctldata.ValidateVSchemaResponse
+ 226, // 229: vtctlservice.Vtctld.VDiffCreate:output_type -> vtctldata.VDiffCreateResponse
+ 227, // 230: vtctlservice.Vtctld.VDiffDelete:output_type -> vtctldata.VDiffDeleteResponse
+ 228, // 231: vtctlservice.Vtctld.VDiffResume:output_type -> vtctldata.VDiffResumeResponse
+ 229, // 232: vtctlservice.Vtctld.VDiffShow:output_type -> vtctldata.VDiffShowResponse
+ 230, // 233: vtctlservice.Vtctld.VDiffStop:output_type -> vtctldata.VDiffStopResponse
+ 231, // 234: vtctlservice.Vtctld.WorkflowDelete:output_type -> vtctldata.WorkflowDeleteResponse
+ 181, // 235: vtctlservice.Vtctld.WorkflowStatus:output_type -> vtctldata.WorkflowStatusResponse
+ 232, // 236: vtctlservice.Vtctld.WorkflowSwitchTraffic:output_type -> vtctldata.WorkflowSwitchTrafficResponse
+ 233, // 237: vtctlservice.Vtctld.WorkflowUpdate:output_type -> vtctldata.WorkflowUpdateResponse
+ 234, // 238: vtctlservice.Vtctld.GetMirrorRules:output_type -> vtctldata.GetMirrorRulesResponse
+ 235, // 239: vtctlservice.Vtctld.WorkflowMirrorTraffic:output_type -> vtctldata.WorkflowMirrorTrafficResponse
+ 120, // [120:240] is the sub-list for method output_type
+ 0, // [0:120] 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 0d336619ac0..56cef8d1dcd 100644
--- a/go/vt/proto/vtctlservice/vtctlservice_grpc.pb.go
+++ b/go/vt/proto/vtctlservice/vtctlservice_grpc.pb.go
@@ -464,6 +464,9 @@ type VtctldClient interface {
// WorkflowUpdate updates the configuration of a vreplication workflow
// using the provided updated parameters.
WorkflowUpdate(ctx context.Context, in *vtctldata.WorkflowUpdateRequest, opts ...grpc.CallOption) (*vtctldata.WorkflowUpdateResponse, error)
+ // GetMirrorRules returns the VSchema routing rules.
+ GetMirrorRules(ctx context.Context, in *vtctldata.GetMirrorRulesRequest, opts ...grpc.CallOption) (*vtctldata.GetMirrorRulesResponse, error)
+ WorkflowMirrorTraffic(ctx context.Context, in *vtctldata.WorkflowMirrorTrafficRequest, opts ...grpc.CallOption) (*vtctldata.WorkflowMirrorTrafficResponse, error)
}
type vtctldClient struct {
@@ -1596,6 +1599,24 @@ func (c *vtctldClient) WorkflowUpdate(ctx context.Context, in *vtctldata.Workflo
return out, nil
}
+func (c *vtctldClient) GetMirrorRules(ctx context.Context, in *vtctldata.GetMirrorRulesRequest, opts ...grpc.CallOption) (*vtctldata.GetMirrorRulesResponse, error) {
+ out := new(vtctldata.GetMirrorRulesResponse)
+ err := c.cc.Invoke(ctx, "/vtctlservice.Vtctld/GetMirrorRules", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *vtctldClient) WorkflowMirrorTraffic(ctx context.Context, in *vtctldata.WorkflowMirrorTrafficRequest, opts ...grpc.CallOption) (*vtctldata.WorkflowMirrorTrafficResponse, error) {
+ out := new(vtctldata.WorkflowMirrorTrafficResponse)
+ err := c.cc.Invoke(ctx, "/vtctlservice.Vtctld/WorkflowMirrorTraffic", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
// VtctldServer is the server API for Vtctld service.
// All implementations must embed UnimplementedVtctldServer
// for forward compatibility
@@ -1928,6 +1949,9 @@ type VtctldServer interface {
// WorkflowUpdate updates the configuration of a vreplication workflow
// using the provided updated parameters.
WorkflowUpdate(context.Context, *vtctldata.WorkflowUpdateRequest) (*vtctldata.WorkflowUpdateResponse, error)
+ // GetMirrorRules returns the VSchema routing rules.
+ GetMirrorRules(context.Context, *vtctldata.GetMirrorRulesRequest) (*vtctldata.GetMirrorRulesResponse, error)
+ WorkflowMirrorTraffic(context.Context, *vtctldata.WorkflowMirrorTrafficRequest) (*vtctldata.WorkflowMirrorTrafficResponse, error)
mustEmbedUnimplementedVtctldServer()
}
@@ -2286,6 +2310,12 @@ func (UnimplementedVtctldServer) WorkflowSwitchTraffic(context.Context, *vtctlda
func (UnimplementedVtctldServer) WorkflowUpdate(context.Context, *vtctldata.WorkflowUpdateRequest) (*vtctldata.WorkflowUpdateResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method WorkflowUpdate not implemented")
}
+func (UnimplementedVtctldServer) GetMirrorRules(context.Context, *vtctldata.GetMirrorRulesRequest) (*vtctldata.GetMirrorRulesResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method GetMirrorRules not implemented")
+}
+func (UnimplementedVtctldServer) WorkflowMirrorTraffic(context.Context, *vtctldata.WorkflowMirrorTrafficRequest) (*vtctldata.WorkflowMirrorTrafficResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method WorkflowMirrorTraffic not implemented")
+}
func (UnimplementedVtctldServer) mustEmbedUnimplementedVtctldServer() {}
// UnsafeVtctldServer may be embedded to opt out of forward compatibility for this service.
@@ -4414,6 +4444,42 @@ func _Vtctld_WorkflowUpdate_Handler(srv interface{}, ctx context.Context, dec fu
return interceptor(ctx, in, info, handler)
}
+func _Vtctld_GetMirrorRules_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(vtctldata.GetMirrorRulesRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(VtctldServer).GetMirrorRules(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/vtctlservice.Vtctld/GetMirrorRules",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(VtctldServer).GetMirrorRules(ctx, req.(*vtctldata.GetMirrorRulesRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _Vtctld_WorkflowMirrorTraffic_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(vtctldata.WorkflowMirrorTrafficRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(VtctldServer).WorkflowMirrorTraffic(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/vtctlservice.Vtctld/WorkflowMirrorTraffic",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(VtctldServer).WorkflowMirrorTraffic(ctx, req.(*vtctldata.WorkflowMirrorTrafficRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
// Vtctld_ServiceDesc is the grpc.ServiceDesc for Vtctld service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
@@ -4877,6 +4943,14 @@ var Vtctld_ServiceDesc = grpc.ServiceDesc{
MethodName: "WorkflowUpdate",
Handler: _Vtctld_WorkflowUpdate_Handler,
},
+ {
+ MethodName: "GetMirrorRules",
+ Handler: _Vtctld_GetMirrorRules_Handler,
+ },
+ {
+ MethodName: "WorkflowMirrorTraffic",
+ Handler: _Vtctld_WorkflowMirrorTraffic_Handler,
+ },
},
Streams: []grpc.StreamDesc{
{
diff --git a/go/vt/proto/vttest/vttest.pb.go b/go/vt/proto/vttest/vttest.pb.go
index 0f34089ae16..8dca7c6f112 100644
--- a/go/vt/proto/vttest/vttest.pb.go
+++ b/go/vt/proto/vttest/vttest.pb.go
@@ -212,6 +212,8 @@ type VTTestTopology struct {
Cells []string `protobuf:"bytes,2,rep,name=cells,proto3" json:"cells,omitempty"`
// routing rules for the topology.
RoutingRules *vschema.RoutingRules `protobuf:"bytes,3,opt,name=routing_rules,json=routingRules,proto3" json:"routing_rules,omitempty"`
+ // mirror rules for the topology.
+ MirrorRules *vschema.MirrorRules `protobuf:"bytes,4,opt,name=mirror_rules,json=mirrorRules,proto3" json:"mirror_rules,omitempty"`
}
func (x *VTTestTopology) Reset() {
@@ -267,6 +269,13 @@ func (x *VTTestTopology) GetRoutingRules() *vschema.RoutingRules {
return nil
}
+func (x *VTTestTopology) GetMirrorRules() *vschema.MirrorRules {
+ if x != nil {
+ return x.MirrorRules
+ }
+ return nil
+}
+
var File_vttest_proto protoreflect.FileDescriptor
var file_vttest_proto_rawDesc = []byte{
@@ -286,7 +295,7 @@ var file_vttest_proto_rawDesc = []byte{
0x6c, 0x69, 0x63, 0x61, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x64, 0x6f,
0x6e, 0x6c, 0x79, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52,
0x0b, 0x72, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x03,
- 0x10, 0x04, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0x92,
+ 0x10, 0x04, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0xcb,
0x01, 0x0a, 0x0e, 0x56, 0x54, 0x54, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67,
0x79, 0x12, 0x2e, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x01,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x74, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x4b, 0x65,
@@ -296,10 +305,13 @@ var file_vttest_proto_rawDesc = []byte{
0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x03, 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, 0x42, 0x25, 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, 0x74, 0x65, 0x73, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x33,
+ 0x6c, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x72, 0x75,
+ 0x6c, 0x65, 0x73, 0x18, 0x04, 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, 0x42, 0x25, 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, 0x74,
+ 0x65, 0x73, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -320,16 +332,18 @@ var file_vttest_proto_goTypes = []any{
(*Keyspace)(nil), // 1: vttest.Keyspace
(*VTTestTopology)(nil), // 2: vttest.VTTestTopology
(*vschema.RoutingRules)(nil), // 3: vschema.RoutingRules
+ (*vschema.MirrorRules)(nil), // 4: vschema.MirrorRules
}
var file_vttest_proto_depIdxs = []int32{
0, // 0: vttest.Keyspace.shards:type_name -> vttest.Shard
1, // 1: vttest.VTTestTopology.keyspaces:type_name -> vttest.Keyspace
3, // 2: vttest.VTTestTopology.routing_rules:type_name -> vschema.RoutingRules
- 3, // [3:3] is the sub-list for method output_type
- 3, // [3:3] is the sub-list for method input_type
- 3, // [3:3] is the sub-list for extension type_name
- 3, // [3:3] is the sub-list for extension extendee
- 0, // [0:3] is the sub-list for field type_name
+ 4, // 3: vttest.VTTestTopology.mirror_rules:type_name -> vschema.MirrorRules
+ 4, // [4:4] is the sub-list for method output_type
+ 4, // [4:4] is the sub-list for method input_type
+ 4, // [4:4] is the sub-list for extension type_name
+ 4, // [4:4] is the sub-list for extension extendee
+ 0, // [0:4] is the sub-list for field type_name
}
func init() { file_vttest_proto_init() }
diff --git a/go/vt/proto/vttest/vttest_vtproto.pb.go b/go/vt/proto/vttest/vttest_vtproto.pb.go
index 8000a036a5f..82ad7a17e2c 100644
--- a/go/vt/proto/vttest/vttest_vtproto.pb.go
+++ b/go/vt/proto/vttest/vttest_vtproto.pb.go
@@ -72,6 +72,7 @@ func (m *VTTestTopology) CloneVT() *VTTestTopology {
}
r := &VTTestTopology{
RoutingRules: m.RoutingRules.CloneVT(),
+ MirrorRules: m.MirrorRules.CloneVT(),
}
if rhs := m.Keyspaces; rhs != nil {
tmpContainer := make([]*Keyspace, len(rhs))
@@ -235,6 +236,16 @@ func (m *VTTestTopology) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
+ if m.MirrorRules != nil {
+ size, err := m.MirrorRules.MarshalToSizedBufferVT(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarint(dAtA, i, uint64(size))
+ i--
+ dAtA[i] = 0x22
+ }
if m.RoutingRules != nil {
size, err := m.RoutingRules.MarshalToSizedBufferVT(dAtA[:i])
if err != nil {
@@ -346,6 +357,10 @@ func (m *VTTestTopology) SizeVT() (n int) {
l = m.RoutingRules.SizeVT()
n += 1 + l + sov(uint64(l))
}
+ if m.MirrorRules != nil {
+ l = m.MirrorRules.SizeVT()
+ n += 1 + l + sov(uint64(l))
+ }
n += len(m.unknownFields)
return n
}
@@ -757,6 +772,42 @@ func (m *VTTestTopology) UnmarshalVT(dAtA []byte) error {
return err
}
iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field MirrorRules", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflow
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLength
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLength
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.MirrorRules == nil {
+ m.MirrorRules = &vschema.MirrorRules{}
+ }
+ if err := m.MirrorRules.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skip(dAtA[iNdEx:])
diff --git a/go/vt/topo/server.go b/go/vt/topo/server.go
index 6e5fadd8b97..f2a3e8774e7 100644
--- a/go/vt/topo/server.go
+++ b/go/vt/topo/server.go
@@ -81,6 +81,7 @@ const (
ExternalClustersFile = "ExternalClusters"
ShardRoutingRulesFile = "ShardRoutingRules"
CommonRoutingRulesFile = "Rules"
+ MirrorRulesFile = "MirrorRules"
)
// Path for all object types.
diff --git a/go/vt/topo/srv_vschema.go b/go/vt/topo/srv_vschema.go
index c118253e8a8..f69fca83537 100644
--- a/go/vt/topo/srv_vschema.go
+++ b/go/vt/topo/srv_vschema.go
@@ -210,6 +210,12 @@ func (ts *Server) RebuildSrvVSchema(ctx context.Context, cells []string) error {
}
srvVSchema.KeyspaceRoutingRules = krr
+ mr, err := ts.GetMirrorRules(ctx)
+ if err != nil {
+ return fmt.Errorf("GetMirrorRules failed: %v", err)
+ }
+ srvVSchema.MirrorRules = mr
+
// now save the SrvVSchema in all cells in parallel
for _, cell := range cells {
wg.Add(1)
diff --git a/go/vt/topo/topotests/srv_vschema_test.go b/go/vt/topo/topotests/srv_vschema_test.go
index 85a2d65c4ec..8fd818150b0 100644
--- a/go/vt/topo/topotests/srv_vschema_test.go
+++ b/go/vt/topo/topotests/srv_vschema_test.go
@@ -29,6 +29,7 @@ import (
func TestRebuildVSchema(t *testing.T) {
emptySrvVSchema := &vschemapb.SrvVSchema{
+ MirrorRules: &vschemapb.MirrorRules{},
RoutingRules: &vschemapb.RoutingRules{},
ShardRoutingRules: &vschemapb.ShardRoutingRules{},
}
@@ -52,6 +53,7 @@ func TestRebuildVSchema(t *testing.T) {
// create a keyspace, rebuild, should see an empty entry
emptyKs1SrvVSchema := &vschemapb.SrvVSchema{
+ MirrorRules: &vschemapb.MirrorRules{},
RoutingRules: &vschemapb.RoutingRules{},
ShardRoutingRules: &vschemapb.ShardRoutingRules{},
Keyspaces: map[string]*vschemapb.Keyspace{
@@ -81,6 +83,7 @@ func TestRebuildVSchema(t *testing.T) {
t.Errorf("RebuildVSchema failed: %v", err)
}
wanted1 := &vschemapb.SrvVSchema{
+ MirrorRules: &vschemapb.MirrorRules{},
RoutingRules: &vschemapb.RoutingRules{},
ShardRoutingRules: &vschemapb.ShardRoutingRules{},
Keyspaces: map[string]*vschemapb.Keyspace{
@@ -122,6 +125,7 @@ func TestRebuildVSchema(t *testing.T) {
t.Errorf("RebuildVSchema failed: %v", err)
}
wanted2 := &vschemapb.SrvVSchema{
+ MirrorRules: &vschemapb.MirrorRules{},
RoutingRules: &vschemapb.RoutingRules{},
ShardRoutingRules: &vschemapb.ShardRoutingRules{},
Keyspaces: map[string]*vschemapb.Keyspace{
@@ -160,6 +164,7 @@ func TestRebuildVSchema(t *testing.T) {
t.Errorf("RebuildVSchema failed: %v", err)
}
wanted3 := &vschemapb.SrvVSchema{
+ MirrorRules: &vschemapb.MirrorRules{},
RoutingRules: rr,
ShardRoutingRules: &vschemapb.ShardRoutingRules{},
Keyspaces: map[string]*vschemapb.Keyspace{
diff --git a/go/vt/topo/vschema.go b/go/vt/topo/vschema.go
index c6845691b25..d9802da2c35 100644
--- a/go/vt/topo/vschema.go
+++ b/go/vt/topo/vschema.go
@@ -212,3 +212,39 @@ func (ts *Server) GetKeyspaceRoutingRules(ctx context.Context) (*vschemapb.Keysp
}
return rules, nil
}
+
+// GetMirrorRules fetches the mirror rules from the topo.
+func (ts *Server) GetMirrorRules(ctx context.Context) (*vschemapb.MirrorRules, error) {
+ rr := &vschemapb.MirrorRules{}
+ data, _, err := ts.globalCell.Get(ctx, MirrorRulesFile)
+ if err != nil {
+ if IsErrType(err, NoNode) {
+ return rr, nil
+ }
+ return nil, err
+ }
+ err = rr.UnmarshalVT(data)
+ if err != nil {
+ return nil, vterrors.Wrapf(err, "bad mirror rules data: %q", data)
+ }
+ return rr, nil
+}
+
+// SaveMirrorRules saves the mirror rules into the topo.
+func (ts *Server) SaveMirrorRules(ctx context.Context, mirrorRules *vschemapb.MirrorRules) error {
+ data, err := mirrorRules.MarshalVT()
+ if err != nil {
+ return err
+ }
+
+ if len(data) == 0 {
+ // No vschema, remove it. So we can remove the keyspace.
+ if err := ts.globalCell.Delete(ctx, MirrorRulesFile, nil); err != nil && !IsErrType(err, NoNode) {
+ return err
+ }
+ return nil
+ }
+
+ _, err = ts.globalCell.Update(ctx, MirrorRulesFile, data, nil)
+ return err
+}
diff --git a/go/vt/topotools/mirror_rules.go b/go/vt/topotools/mirror_rules.go
new file mode 100644
index 00000000000..3076a12b394
--- /dev/null
+++ b/go/vt/topotools/mirror_rules.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 topotools
+
+import (
+ "context"
+
+ "vitess.io/vitess/go/vt/log"
+ "vitess.io/vitess/go/vt/topo"
+
+ vschemapb "vitess.io/vitess/go/vt/proto/vschema"
+)
+
+func GetMirrorRulesMap(rules *vschemapb.MirrorRules) map[string]map[string]float32 {
+ if rules == nil {
+ return nil
+ }
+ rulesMap := make(map[string]map[string]float32)
+ for _, mr := range rules.Rules {
+ if _, ok := rulesMap[mr.FromTable]; !ok {
+ rulesMap[mr.FromTable] = make(map[string]float32)
+ }
+ rulesMap[mr.FromTable][mr.ToTable] = mr.Percent
+ }
+ return rulesMap
+}
+
+// GetMirrorRules fetches mirror rules from the topology server and returns a
+// mapping of fromTable=>toTable=>percent.
+func GetMirrorRules(ctx context.Context, ts *topo.Server) (map[string]map[string]float32, error) {
+ mrs, err := ts.GetMirrorRules(ctx)
+ if err != nil {
+ return nil, err
+ }
+
+ rules := GetMirrorRulesMap(mrs)
+
+ return rules, nil
+}
+
+// SaveMirrorRules converts a mapping of fromTable=>[]toTables into a
+// vschemapb.MirrorRules protobuf message and saves it in the topology.
+func SaveMirrorRules(ctx context.Context, ts *topo.Server, rules map[string]map[string]float32) error {
+ log.Infof("Saving mirror rules %v\n", rules)
+
+ rrs := &vschemapb.MirrorRules{Rules: make([]*vschemapb.MirrorRule, 0)}
+ for fromTable, mrs := range rules {
+ for toTable, percent := range mrs {
+ rrs.Rules = append(rrs.Rules, &vschemapb.MirrorRule{
+ FromTable: fromTable,
+ Percent: percent,
+ ToTable: toTable,
+ })
+ }
+ }
+
+ return ts.SaveMirrorRules(ctx, rrs)
+}
diff --git a/go/vt/topotools/mirror_rules_test.go b/go/vt/topotools/mirror_rules_test.go
new file mode 100644
index 00000000000..3ce25cb4de6
--- /dev/null
+++ b/go/vt/topotools/mirror_rules_test.go
@@ -0,0 +1,79 @@
+/*
+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 topotools
+
+import (
+ "context"
+ "errors"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+
+ "vitess.io/vitess/go/vt/topo/memorytopo"
+)
+
+func TestMirrorRulesRoundTrip(t *testing.T) {
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+ ts := memorytopo.NewServer(ctx, "zone1")
+ defer ts.Close()
+
+ rules := map[string]map[string]float32{
+ "k1.t1@replica": {
+ "k2": 50.0,
+ },
+ "k1.t4": {
+ "k3": 75.0,
+ },
+ }
+
+ err := SaveMirrorRules(ctx, ts, rules)
+ require.NoError(t, err, "could not save mirror rules to topo %v", rules)
+
+ roundtripRules, err := GetMirrorRules(ctx, ts)
+ require.NoError(t, err, "could not fetch mirror rules from topo")
+
+ assert.Equal(t, rules, roundtripRules)
+}
+
+func TestMirrorRulesErrors(t *testing.T) {
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+ ts, factory := memorytopo.NewServerAndFactory(ctx, "zone1")
+ defer ts.Close()
+ factory.SetError(errors.New("topo failure for testing"))
+
+ t.Run("GetMirrorRules error", func(t *testing.T) {
+ rules, err := GetMirrorRules(ctx, ts)
+ assert.Error(t, err, "expected error from GetMirrorRules, got rules=%v", rules)
+ })
+
+ t.Run("SaveMirrorRules error", func(t *testing.T) {
+ rules := map[string]map[string]float32{
+ "k1.t1@replica": {
+ "k2": 50.0,
+ },
+ "k1.t4": {
+ "k3": 75.0,
+ },
+ }
+
+ err := SaveMirrorRules(ctx, ts, rules)
+ assert.Error(t, err, "expected error from SaveMirrorRules, got rules=%v", rules)
+ })
+}
diff --git a/go/vt/vtcombo/tablet_map.go b/go/vt/vtcombo/tablet_map.go
index 27fbf2dd6e3..77db2d0afef 100644
--- a/go/vt/vtcombo/tablet_map.go
+++ b/go/vt/vtcombo/tablet_map.go
@@ -165,6 +165,23 @@ func InitRoutingRules(
return ts.RebuildSrvVSchema(ctx, nil)
}
+// InitMirrorRules saves the mirror rules into ts and reloads the vschema.
+func InitMirrorRules(
+ ctx context.Context,
+ ts *topo.Server,
+ mr *vschemapb.MirrorRules,
+) error {
+ if mr == nil {
+ return nil
+ }
+
+ if err := ts.SaveMirrorRules(ctx, mr); err != nil {
+ return err
+ }
+
+ return ts.RebuildSrvVSchema(ctx, nil)
+}
+
// InitTabletMap creates the action tms and associated data structures
// for all tablets, based on the vttest proto parameter.
func InitTabletMap(
diff --git a/go/vt/vtctl/grpcvtctldclient/client_gen.go b/go/vt/vtctl/grpcvtctldclient/client_gen.go
index e0b14337bba..2153d2c94f4 100644
--- a/go/vt/vtctl/grpcvtctldclient/client_gen.go
+++ b/go/vt/vtctl/grpcvtctldclient/client_gen.go
@@ -362,6 +362,15 @@ func (client *gRPCVtctldClient) GetKeyspaces(ctx context.Context, in *vtctldatap
return client.c.GetKeyspaces(ctx, in, opts...)
}
+// GetMirrorRules is part of the vtctlservicepb.VtctldClient interface.
+func (client *gRPCVtctldClient) GetMirrorRules(ctx context.Context, in *vtctldatapb.GetMirrorRulesRequest, opts ...grpc.CallOption) (*vtctldatapb.GetMirrorRulesResponse, error) {
+ if client.c == nil {
+ return nil, status.Error(codes.Unavailable, connClosedMsg)
+ }
+
+ return client.c.GetMirrorRules(ctx, in, opts...)
+}
+
// GetPermissions is part of the vtctlservicepb.VtctldClient interface.
func (client *gRPCVtctldClient) GetPermissions(ctx context.Context, in *vtctldatapb.GetPermissionsRequest, opts ...grpc.CallOption) (*vtctldatapb.GetPermissionsResponse, error) {
if client.c == nil {
@@ -1055,6 +1064,15 @@ func (client *gRPCVtctldClient) WorkflowDelete(ctx context.Context, in *vtctldat
return client.c.WorkflowDelete(ctx, in, opts...)
}
+// WorkflowMirrorTraffic is part of the vtctlservicepb.VtctldClient interface.
+func (client *gRPCVtctldClient) WorkflowMirrorTraffic(ctx context.Context, in *vtctldatapb.WorkflowMirrorTrafficRequest, opts ...grpc.CallOption) (*vtctldatapb.WorkflowMirrorTrafficResponse, error) {
+ if client.c == nil {
+ return nil, status.Error(codes.Unavailable, connClosedMsg)
+ }
+
+ return client.c.WorkflowMirrorTraffic(ctx, in, opts...)
+}
+
// WorkflowStatus is part of the vtctlservicepb.VtctldClient interface.
func (client *gRPCVtctldClient) WorkflowStatus(ctx context.Context, in *vtctldatapb.WorkflowStatusRequest, opts ...grpc.CallOption) (*vtctldatapb.WorkflowStatusResponse, error) {
if client.c == nil {
diff --git a/go/vt/vtctl/grpcvtctldserver/server.go b/go/vt/vtctl/grpcvtctldserver/server.go
index 92ae7c66146..65f99c43694 100644
--- a/go/vt/vtctl/grpcvtctldserver/server.go
+++ b/go/vt/vtctl/grpcvtctldserver/server.go
@@ -291,7 +291,6 @@ func (s *VtctldServer) ApplySchema(ctx context.Context, req *vtctldatapb.ApplySc
schemamanager.NewPlainController(req.Sql, req.Keyspace),
executor,
)
-
if err != nil {
return nil, err
}
@@ -464,7 +463,6 @@ func (s *VtctldServer) BackupShard(req *vtctldatapb.BackupShardRequest, stream v
span.Annotate("incremental_from_pos", req.IncrementalFromPos)
tablets, stats, err := reparentutil.ShardReplicationStatuses(ctx, s.ts, s.tmc, req.Keyspace, req.Shard)
-
// Instead of return on err directly, only return err when no tablets for backup at all
if err != nil {
tablets = reparentutil.GetBackupCandidates(tablets, stats)
@@ -517,7 +515,8 @@ func (s *VtctldServer) BackupShard(req *vtctldatapb.BackupShardRequest, stream v
func (s *VtctldServer) backupTablet(ctx context.Context, tablet *topodatapb.Tablet, req *vtctldatapb.BackupRequest, stream interface {
Send(resp *vtctldatapb.BackupResponse) error
-}) error {
+},
+) error {
r := &tabletmanagerdatapb.BackupRequest{
Concurrency: req.Concurrency,
AllowPrimary: req.AllowPrimary,
@@ -1898,7 +1897,6 @@ func (s *VtctldServer) GetSrvKeyspaces(ctx context.Context, req *vtctldatapb.Get
for _, cell := range cells {
var srvKeyspace *topodatapb.SrvKeyspace
srvKeyspace, err = s.ts.GetSrvKeyspace(ctx, cell, req.Keyspace)
-
if err != nil {
if !topo.IsErrType(err, topo.NoNode) {
return nil, err
@@ -2036,7 +2034,6 @@ func (s *VtctldServer) GetSrvVSchemas(ctx context.Context, req *vtctldatapb.GetS
for _, cell := range cells {
var sv *vschemapb.SrvVSchema
sv, err = s.ts.GetSrvVSchema(ctx, cell)
-
if err != nil {
if !topo.IsErrType(err, topo.NoNode) {
return nil, err
@@ -3289,6 +3286,7 @@ func (s *VtctldServer) ReshardCreate(ctx context.Context, req *vtctldatapb.Resha
resp, err = s.ws.ReshardCreate(ctx, req)
return resp, err
}
+
func (s *VtctldServer) RestoreFromBackup(req *vtctldatapb.RestoreFromBackupRequest, stream vtctlservicepb.Vtctld_RestoreFromBackupServer) (err error) {
span, ctx := trace.NewSpan(stream.Context(), "VtctldServer.RestoreFromBackup")
defer span.Finish()
@@ -4119,7 +4117,6 @@ func (s *VtctldServer) UpdateCellInfo(ctx context.Context, req *vtctldatapb.Upda
return nil
})
-
if err != nil {
return nil, err
}
@@ -4150,7 +4147,6 @@ func (s *VtctldServer) UpdateCellsAlias(ctx context.Context, req *vtctldatapb.Up
ca.Cells = req.CellsAlias.Cells
return nil
})
-
if err != nil {
return nil, err
}
@@ -5060,6 +5056,38 @@ func (s *VtctldServer) WorkflowUpdate(ctx context.Context, req *vtctldatapb.Work
return resp, err
}
+// GetMirrorRules is part of the vtctlservicepb.VtctldServer interface.
+func (s *VtctldServer) GetMirrorRules(ctx context.Context, req *vtctldatapb.GetMirrorRulesRequest) (resp *vtctldatapb.GetMirrorRulesResponse, err error) {
+ span, ctx := trace.NewSpan(ctx, "VtctldServer.GetMirrorRules")
+ defer span.Finish()
+
+ defer panicHandler(&err)
+
+ mr, err := s.ts.GetMirrorRules(ctx)
+ if err != nil {
+ return nil, err
+ }
+
+ return &vtctldatapb.GetMirrorRulesResponse{
+ MirrorRules: mr,
+ }, nil
+}
+
+// WorkflowMirrorTraffic is part of the vtctlservicepb.VtctldServer interface.
+func (s *VtctldServer) WorkflowMirrorTraffic(ctx context.Context, req *vtctldatapb.WorkflowMirrorTrafficRequest) (resp *vtctldatapb.WorkflowMirrorTrafficResponse, err error) {
+ span, ctx := trace.NewSpan(ctx, "VtctldServer.WorkflowMirrorTraffic")
+ defer span.Finish()
+
+ defer panicHandler(&err)
+
+ span.Annotate("keyspace", req.Keyspace)
+ span.Annotate("workflow", req.Workflow)
+ span.Annotate("percent", req.Percent)
+
+ resp, err = s.ws.WorkflowMirrorTraffic(ctx, req)
+ return resp, err
+}
+
// StartServer registers a VtctldServer for RPCs on the given gRPC server.
func StartServer(s *grpc.Server, env *vtenv.Environment, ts *topo.Server) {
vtctlservicepb.RegisterVtctldServer(s, NewVtctldServer(env, ts))
@@ -5150,8 +5178,10 @@ var getVersionFromTabletDebugVars = func(tabletAddr string) (string, error) {
return version, nil
}
-var versionFuncMu sync.Mutex
-var getVersionFromTablet = getVersionFromTabletDebugVars
+var (
+ versionFuncMu sync.Mutex
+ getVersionFromTablet = getVersionFromTabletDebugVars
+)
func SetVersionFunc(versionFunc func(string) (string, error)) {
versionFuncMu.Lock()
diff --git a/go/vt/vtctl/grpcvtctldserver/server_test.go b/go/vt/vtctl/grpcvtctldserver/server_test.go
index f72b92479a1..1b641488e1a 100644
--- a/go/vt/vtctl/grpcvtctldserver/server_test.go
+++ b/go/vt/vtctl/grpcvtctldserver/server_test.go
@@ -665,6 +665,9 @@ func TestApplyVSchema(t *testing.T) {
Sharded: false,
},
},
+ MirrorRules: &vschemapb.MirrorRules{
+ Rules: []*vschemapb.MirrorRule{},
+ },
RoutingRules: &vschemapb.RoutingRules{
Rules: []*vschemapb.RoutingRule{},
},
diff --git a/go/vt/vtctl/localvtctldclient/client_gen.go b/go/vt/vtctl/localvtctldclient/client_gen.go
index 3457c355cb6..2738c771be3 100644
--- a/go/vt/vtctl/localvtctldclient/client_gen.go
+++ b/go/vt/vtctl/localvtctldclient/client_gen.go
@@ -306,6 +306,11 @@ func (client *localVtctldClient) GetKeyspaces(ctx context.Context, in *vtctldata
return client.s.GetKeyspaces(ctx, in)
}
+// GetMirrorRules is part of the vtctlservicepb.VtctldClient interface.
+func (client *localVtctldClient) GetMirrorRules(ctx context.Context, in *vtctldatapb.GetMirrorRulesRequest, opts ...grpc.CallOption) (*vtctldatapb.GetMirrorRulesResponse, error) {
+ return client.s.GetMirrorRules(ctx, in)
+}
+
// GetPermissions is part of the vtctlservicepb.VtctldClient interface.
func (client *localVtctldClient) GetPermissions(ctx context.Context, in *vtctldatapb.GetPermissionsRequest, opts ...grpc.CallOption) (*vtctldatapb.GetPermissionsResponse, error) {
return client.s.GetPermissions(ctx, in)
@@ -737,6 +742,11 @@ func (client *localVtctldClient) WorkflowDelete(ctx context.Context, in *vtctlda
return client.s.WorkflowDelete(ctx, in)
}
+// WorkflowMirrorTraffic is part of the vtctlservicepb.VtctldClient interface.
+func (client *localVtctldClient) WorkflowMirrorTraffic(ctx context.Context, in *vtctldatapb.WorkflowMirrorTrafficRequest, opts ...grpc.CallOption) (*vtctldatapb.WorkflowMirrorTrafficResponse, error) {
+ return client.s.WorkflowMirrorTraffic(ctx, in)
+}
+
// WorkflowStatus is part of the vtctlservicepb.VtctldClient interface.
func (client *localVtctldClient) WorkflowStatus(ctx context.Context, in *vtctldatapb.WorkflowStatusRequest, opts ...grpc.CallOption) (*vtctldatapb.WorkflowStatusResponse, error) {
return client.s.WorkflowStatus(ctx, in)
diff --git a/go/vt/vtctl/workflow/materializer_env_test.go b/go/vt/vtctl/workflow/materializer_env_test.go
index fe49b24a10d..569651f85ca 100644
--- a/go/vt/vtctl/workflow/materializer_env_test.go
+++ b/go/vt/vtctl/workflow/materializer_env_test.go
@@ -25,13 +25,17 @@ import (
"testing"
"time"
+ "github.com/stretchr/testify/require"
"google.golang.org/protobuf/proto"
"vitess.io/vitess/go/protoutil"
"vitess.io/vitess/go/sqltypes"
+ "vitess.io/vitess/go/vt/key"
+ "vitess.io/vitess/go/vt/logutil"
"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/topotools"
"vitess.io/vitess/go/vt/vtenv"
"vitess.io/vitess/go/vt/vterrors"
"vitess.io/vitess/go/vt/vttablet/tmclient"
@@ -40,6 +44,7 @@ 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"
vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
)
@@ -53,35 +58,60 @@ type testMaterializerEnv struct {
topoServ *topo.Server
cell string
tmc *testMaterializerTMClient
+ venv *vtenv.Environment
}
//----------------------------------------------
// testMaterializerEnv
-func newTestMaterializerEnv(t *testing.T, ctx context.Context, ms *vtctldatapb.MaterializeSettings, sources, targets []string) *testMaterializerEnv {
+func newTestMaterializerEnv(t *testing.T, ctx context.Context, ms *vtctldatapb.MaterializeSettings, sourceShards, targetShards []string) *testMaterializerEnv {
t.Helper()
+
+ tmc := newTestMaterializerTMClient(ms.SourceKeyspace, sourceShards, ms.TableSettings)
+ topoServ := memorytopo.NewServer(ctx, "cell")
+ venv := vtenv.NewTestEnv()
env := &testMaterializerEnv{
ms: ms,
- sources: sources,
- targets: targets,
+ sources: sourceShards,
+ targets: targetShards,
tablets: make(map[int]*topodatapb.Tablet),
- topoServ: memorytopo.NewServer(ctx, defaultCellName),
- cell: defaultCellName,
- tmc: newTestMaterializerTMClient(),
+ topoServ: topoServ,
+ cell: "cell",
+ tmc: tmc,
+ ws: NewServer(venv, topoServ, tmc),
+ venv: venv,
}
- venv := vtenv.NewTestEnv()
- env.ws = NewServer(venv, env.topoServ, env.tmc)
+
+ require.NoError(t, topoServ.CreateKeyspace(ctx, ms.SourceKeyspace, &topodatapb.Keyspace{}))
+ require.NoError(t, topoServ.SaveVSchema(ctx, ms.SourceKeyspace, &vschemapb.Keyspace{}))
+ if ms.SourceKeyspace != ms.TargetKeyspace {
+ require.NoError(t, topoServ.CreateKeyspace(ctx, ms.TargetKeyspace, &topodatapb.Keyspace{}))
+ require.NoError(t, topoServ.SaveVSchema(ctx, ms.TargetKeyspace, &vschemapb.Keyspace{}))
+ }
+ logger := logutil.NewConsoleLogger()
+ require.NoError(t, topoServ.RebuildSrvVSchema(ctx, []string{"cell"}))
+
tabletID := 100
- for _, shard := range sources {
- _ = env.addTablet(tabletID, env.ms.SourceKeyspace, shard, topodatapb.TabletType_PRIMARY)
+ 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
}
- if ms.SourceKeyspace != ms.TargetKeyspace {
- tabletID = 200
- for _, shard := range targets {
- _ = env.addTablet(tabletID, env.ms.TargetKeyspace, shard, topodatapb.TabletType_PRIMARY)
- tabletID += 10
+
+ require.NoError(t, topotools.RebuildKeyspace(ctx, logger, topoServ, ms.SourceKeyspace, []string{"cell"}, false))
+
+ tabletID = 200
+ for _, shard := range targetShards {
+ if ms.SourceKeyspace == ms.TargetKeyspace {
+ if _, ok := sourceShardsMap[shard]; ok {
+ continue
+ }
}
+ require.NoError(t, topoServ.CreateShard(ctx, ms.TargetKeyspace, shard))
+ _ = env.addTablet(t, tabletID, env.ms.TargetKeyspace, shard, topodatapb.TabletType_PRIMARY)
+ tabletID += 10
}
for _, ts := range ms.TableSettings {
@@ -103,6 +133,11 @@ func newTestMaterializerEnv(t *testing.T, ctx context.Context, ms *vtctldatapb.M
}},
}
}
+
+ if ms.SourceKeyspace != ms.TargetKeyspace {
+ require.NoError(t, topotools.RebuildKeyspace(ctx, logger, topoServ, ms.TargetKeyspace, []string{"cell"}, false))
+ }
+
return env
}
@@ -112,7 +147,10 @@ func (env *testMaterializerEnv) close() {
}
}
-func (env *testMaterializerEnv) addTablet(id int, keyspace, shard string, tabletType topodatapb.TabletType) *topodatapb.Tablet {
+func (env *testMaterializerEnv) addTablet(t *testing.T, id int, keyspace, shard string, tabletType topodatapb.TabletType) *topodatapb.Tablet {
+ keyRanges, err := key.ParseShardingSpec(shard)
+ require.NoError(t, err)
+ require.Len(t, keyRanges, 1)
tablet := &topodatapb.Tablet{
Alias: &topodatapb.TabletAlias{
Cell: env.cell,
@@ -120,7 +158,7 @@ func (env *testMaterializerEnv) addTablet(id int, keyspace, shard string, tablet
},
Keyspace: keyspace,
Shard: shard,
- KeyRange: &topodatapb.KeyRange{},
+ KeyRange: keyRanges[0],
Type: tabletType,
PortMap: map[string]int32{
"test": int32(id),
@@ -148,12 +186,16 @@ func (env *testMaterializerEnv) deleteTablet(tablet *topodatapb.Tablet) {
delete(env.tablets, int(tablet.Alias.Uid))
}
-//----------------------------------------------
+// ----------------------------------------------
// testMaterializerTMClient
+type readVReplicationWorkflowFunc = func(ctx context.Context, tablet *topodatapb.Tablet, request *tabletmanagerdatapb.ReadVReplicationWorkflowRequest) (*tabletmanagerdatapb.ReadVReplicationWorkflowResponse, error)
type testMaterializerTMClient struct {
tmclient.TabletManagerClient
- schema map[string]*tabletmanagerdatapb.SchemaDefinition
+ keyspace string
+ schema map[string]*tabletmanagerdatapb.SchemaDefinition
+ sourceShards []string
+ tableSettings []*vtctldatapb.TableMaterializeSettings
mu sync.Mutex
vrQueries map[int][]*queryResult
@@ -161,11 +203,17 @@ type testMaterializerTMClient struct {
// Used to confirm the number of times WorkflowDelete was called.
workflowDeleteCalls int
+
+ // Used to override the response to ReadVReplicationWorkflow.
+ readVReplicationWorkflow readVReplicationWorkflowFunc
}
-func newTestMaterializerTMClient() *testMaterializerTMClient {
+func newTestMaterializerTMClient(keyspace string, sourceShards []string, tableSettings []*vtctldatapb.TableMaterializeSettings) *testMaterializerTMClient {
return &testMaterializerTMClient{
+ keyspace: keyspace,
schema: make(map[string]*tabletmanagerdatapb.SchemaDefinition),
+ sourceShards: sourceShards,
+ tableSettings: tableSettings,
vrQueries: make(map[int][]*queryResult),
createVReplicationWorkflowRequests: make(map[uint32]*tabletmanagerdatapb.CreateVReplicationWorkflowRequest),
}
@@ -182,29 +230,44 @@ func (tmc *testMaterializerTMClient) CreateVReplicationWorkflow(ctx context.Cont
}
func (tmc *testMaterializerTMClient) ReadVReplicationWorkflow(ctx context.Context, tablet *topodatapb.Tablet, request *tabletmanagerdatapb.ReadVReplicationWorkflowRequest) (*tabletmanagerdatapb.ReadVReplicationWorkflowResponse, error) {
+ if tmc.readVReplicationWorkflow != nil {
+ return tmc.readVReplicationWorkflow(ctx, tablet, request)
+ }
+
workflowType := binlogdatapb.VReplicationWorkflowType_MoveTables
if strings.Contains(request.Workflow, "lookup") {
workflowType = binlogdatapb.VReplicationWorkflowType_CreateLookupIndex
}
+
+ rules := make([]*binlogdatapb.Rule, len(tmc.tableSettings))
+ if len(rules) == 0 {
+ rules = append(rules, &binlogdatapb.Rule{Match: "table1"})
+ } else {
+ for i, tableSetting := range tmc.tableSettings {
+ rules[i] = &binlogdatapb.Rule{
+ Match: tableSetting.TargetTable,
+ Filter: tableSetting.SourceExpression,
+ }
+ }
+ }
+
+ streams := make([]*tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream, len(tmc.sourceShards))
+ for i, shard := range tmc.sourceShards {
+ streams[i] = &tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream{
+ Id: int32(i + 1),
+ Bls: &binlogdatapb.BinlogSource{
+ Keyspace: tmc.keyspace,
+ Shard: shard,
+ Filter: &binlogdatapb.Filter{
+ Rules: rules,
+ },
+ },
+ }
+ }
return &tabletmanagerdatapb.ReadVReplicationWorkflowResponse{
Workflow: request.Workflow,
WorkflowType: workflowType,
- Streams: []*tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream{
- {
- Id: 1,
- Bls: &binlogdatapb.BinlogSource{
- Keyspace: "sourceks",
- Shard: "0",
- Filter: &binlogdatapb.Filter{
- Rules: []*binlogdatapb.Rule{
- {
- Match: ".*",
- },
- },
- },
- },
- },
- },
+ Streams: streams,
}, nil
}
@@ -347,31 +410,33 @@ func (tmc *testMaterializerTMClient) ReadVReplicationWorkflows(ctx context.Conte
workflowType = binlogdatapb.VReplicationWorkflowType_CreateLookupIndex
}
}
+ streams := make([]*tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream, len(tmc.sourceShards))
+ for i, shard := range tmc.sourceShards {
+ streams[i] = &tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream{
+ Id: 1,
+ State: binlogdatapb.VReplicationWorkflowState_Running,
+ Bls: &binlogdatapb.BinlogSource{
+ Keyspace: tmc.keyspace,
+ Shard: shard,
+ Filter: &binlogdatapb.Filter{
+ Rules: []*binlogdatapb.Rule{
+ {
+ Match: ".*",
+ },
+ },
+ },
+ },
+ Pos: "MySQL56/" + position,
+ TimeUpdated: protoutil.TimeToProto(time.Now()),
+ TimeHeartbeat: protoutil.TimeToProto(time.Now()),
+ }
+ }
return &tabletmanagerdatapb.ReadVReplicationWorkflowsResponse{
Workflows: []*tabletmanagerdatapb.ReadVReplicationWorkflowResponse{
{
Workflow: req.IncludeWorkflows[0],
WorkflowType: workflowType,
- Streams: []*tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream{
- {
- Id: 1,
- State: binlogdatapb.VReplicationWorkflowState_Running,
- Bls: &binlogdatapb.BinlogSource{
- Keyspace: "sourceks",
- Shard: "0",
- Filter: &binlogdatapb.Filter{
- Rules: []*binlogdatapb.Rule{
- {
- Match: ".*",
- },
- },
- },
- },
- Pos: "MySQL56/" + position,
- TimeUpdated: protoutil.TimeToProto(time.Now()),
- TimeHeartbeat: protoutil.TimeToProto(time.Now()),
- },
- },
+ Streams: streams,
},
},
}, nil
diff --git a/go/vt/vtctl/workflow/server.go b/go/vt/vtctl/workflow/server.go
index 19268866253..86a3a6c6ead 100644
--- a/go/vt/vtctl/workflow/server.go
+++ b/go/vt/vtctl/workflow/server.go
@@ -66,6 +66,7 @@ import (
binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata"
querypb "vitess.io/vitess/go/vt/proto/query"
tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata"
+ "vitess.io/vitess/go/vt/proto/topodata"
topodatapb "vitess.io/vitess/go/vt/proto/topodata"
vschemapb "vitess.io/vitess/go/vt/proto/vschema"
vtctldatapb "vitess.io/vitess/go/vt/proto/vtctldata"
@@ -958,10 +959,7 @@ func (s *Server) getWorkflowState(ctx context.Context, targetKeyspace, workflowN
return ts, state, nil
}
- var (
- reverse bool
- sourceKeyspace string
- )
+ var sourceKeyspace string
// We reverse writes by using the source_keyspace.workflowname_reverse workflow
// spec, so we need to use the source of the reverse workflow, which is the
@@ -970,7 +968,7 @@ func (s *Server) getWorkflowState(ctx context.Context, targetKeyspace, workflowN
// source to check if writes have been switched.
if strings.HasSuffix(workflowName, "_reverse") {
- reverse = true
+ state.IsReverse = true
// Flip the source and target keyspaces.
sourceKeyspace = state.TargetKeyspace
targetKeyspace = state.SourceKeyspace
@@ -1039,7 +1037,7 @@ func (s *Server) getWorkflowState(ctx context.Context, targetKeyspace, workflowN
// We assume a consistent state, so only choose one shard.
var shard *topo.ShardInfo
- if reverse {
+ if state.IsReverse {
shard = ts.TargetShards()[0]
} else {
shard = ts.SourceShards()[0]
@@ -3239,6 +3237,12 @@ func (s *Server) switchReads(ctx context.Context, req *vtctldatapb.WorkflowSwitc
return handleError("workflow validation failed", err)
}
+ // Remove mirror rules for the specified tablet types.
+ if err := sw.mirrorTableTraffic(ctx, roTabletTypes, 0); err != nil {
+ return handleError(fmt.Sprintf("failed to remove mirror rules from source keyspace %s to target keyspace %s, workflow %s, for read-only tablet types",
+ ts.SourceKeyspaceName(), ts.TargetKeyspaceName(), ts.WorkflowName()), err)
+ }
+
// For reads, locking the source keyspace is sufficient.
ctx, unlock, lockErr := sw.lockKeyspace(ctx, ts.SourceKeyspaceName(), "SwitchReads")
if lockErr != nil {
@@ -3311,6 +3315,12 @@ func (s *Server) switchWrites(ctx context.Context, req *vtctldatapb.WorkflowSwit
}
}
+ // Remove mirror rules for the primary tablet type.
+ if err := sw.mirrorTableTraffic(ctx, []topodata.TabletType{topodatapb.TabletType_PRIMARY}, 0); err != nil {
+ return handleError(fmt.Sprintf("failed to remove mirror rules from source keyspace %s to target keyspace %s, workflow %s, for primary tablet type",
+ ts.SourceKeyspaceName(), ts.TargetKeyspaceName(), ts.WorkflowName()), err)
+ }
+
// Need to lock both source and target keyspaces.
tctx, sourceUnlock, lockErr := sw.lockKeyspace(ctx, ts.SourceKeyspaceName(), "SwitchWrites")
if lockErr != nil {
@@ -4068,3 +4078,94 @@ func (s *Server) getWorkflowStatus(ctx context.Context, keyspace string, workflo
}
return workflowStatus, nil
}
+
+// WorkflowMirrorTraffic mirrors traffic from the source keyspace to the target keyspace.
+func (s *Server) WorkflowMirrorTraffic(ctx context.Context, req *vtctldatapb.WorkflowMirrorTrafficRequest) (*vtctldatapb.WorkflowMirrorTrafficResponse, error) {
+ ts, startState, err := s.getWorkflowState(ctx, req.Keyspace, req.Workflow)
+ if err != nil {
+ return nil, err
+ }
+
+ // Traffic mirroring was built with basic MoveTables workflows in mind. In
+ // theory, other workflow types (e.g. Migrate) and variants (e.g. partial,
+ // multi-tenant) could be supported. Until demand for these use cases
+ // arises, reject everything but basic MoveTables.
+ if startState.WorkflowType != TypeMoveTables {
+ return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid action for %s workflow: MirrorTraffic", string(startState.WorkflowType))
+ }
+ if startState.IsReverse {
+ return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid action for reverse workflow: MirrorTraffic")
+ }
+ if ts.MigrationType() != binlogdatapb.MigrationType_TABLES {
+ return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid action for %s migration type: MirrorTraffic", binlogdatapb.MigrationType_name[int32(ts.MigrationType())])
+ }
+ if ts.IsPartialMigration() {
+ return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid action for partial migration: MirrorTraffic")
+ }
+ if ts.IsMultiTenantMigration() {
+ return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid action for multi-tenant migration: MirrorTraffic")
+ }
+
+ // Don't allow traffic to be mirrored if any traffic has been switched over
+ // to the target keyspace.
+ var cannotSwitchTabletTypes []string
+ for _, tt := range req.TabletTypes {
+ if tt == topodatapb.TabletType_RDONLY && len(startState.RdonlyCellsSwitched) > 0 {
+ cannotSwitchTabletTypes = append(cannotSwitchTabletTypes, "rdonly")
+ }
+ if tt == topodatapb.TabletType_REPLICA && len(startState.ReplicaCellsSwitched) > 0 {
+ cannotSwitchTabletTypes = append(cannotSwitchTabletTypes, "replica")
+ }
+ if tt == topodatapb.TabletType_PRIMARY && startState.WritesSwitched {
+ cannotSwitchTabletTypes = append(cannotSwitchTabletTypes, "primary")
+ }
+ }
+ if len(cannotSwitchTabletTypes) > 0 {
+ return nil, vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "cannot mirror [%s] traffic for workflow %s at this time: traffic for those tablet types is switched", strings.Join(cannotSwitchTabletTypes, ","), startState.Workflow)
+ }
+
+ if err := s.mirrorTraffic(ctx, req, ts, startState); err != nil {
+ return nil, err
+ }
+
+ cmd := "MirrorTraffic"
+ resp := &vtctldatapb.WorkflowMirrorTrafficResponse{}
+ log.Infof("Mirror Traffic done for workflow %s.%s", 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 MirrorTraffic operation
+ // and return that as a string.
+ keyspace := req.Keyspace
+ workflow := req.Workflow
+ resp.StartState = startState.String()
+ log.Infof("Before reloading workflow state after mirror traffic: %+v\n", resp.StartState)
+ _, currentState, err := s.getWorkflowState(ctx, keyspace, workflow)
+ if err != nil {
+ resp.CurrentState = fmt.Sprintf("Error reloading workflow state after mirror traffic: %v", err)
+ } else {
+ resp.CurrentState = currentState.String()
+ }
+ return resp, nil
+}
+
+// mirrorTraffic manages mirror routing rules for tables in the workflow.
+func (s *Server) mirrorTraffic(ctx context.Context, req *vtctldatapb.WorkflowMirrorTrafficRequest, ts *trafficSwitcher, state *State) (err error) {
+ // Consistently handle errors by logging and returning them.
+ handleError := func(message string, err error) error {
+ ts.Logger().Error(err)
+ return err
+ }
+
+ log.Infof("Mirroring traffic: %s.%s, workflow state: %s", ts.targetKeyspace, ts.workflow, state.String())
+
+ sw := &switcher{ts: ts, s: s}
+
+ if err := ts.validate(ctx); err != nil {
+ return handleError("workflow validation failed", err)
+ }
+
+ if err := sw.mirrorTableTraffic(ctx, req.TabletTypes, req.Percent); err != nil {
+ return handleError("failed to mirror traffic for the tables", err)
+ }
+
+ return nil
+}
diff --git a/go/vt/vtctl/workflow/server_test.go b/go/vt/vtctl/workflow/server_test.go
index fb432403155..f2b9f6b2496 100644
--- a/go/vt/vtctl/workflow/server_test.go
+++ b/go/vt/vtctl/workflow/server_test.go
@@ -18,6 +18,7 @@ package workflow
import (
"context"
+ "encoding/json"
"fmt"
"slices"
"sort"
@@ -34,6 +35,7 @@ import (
"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/vttablet/tmclient"
@@ -405,11 +407,13 @@ func TestMoveTablesTrafficSwitching(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{
tableName: {
TableDefinitions: []*tabletmanagerdatapb.TableDefinition{
@@ -420,6 +424,7 @@ func TestMoveTablesTrafficSwitching(t *testing.T) {
},
},
}
+
copyTableQR := &queryResult{
query: fmt.Sprintf("select vrepl_id, table_name, lastpk from _vt.copy_state where vrepl_id in (%d) and id in (select max(id) from _vt.copy_state where vrepl_id in (%d) group by vrepl_id, table_name)",
vrID, vrID),
@@ -684,10 +689,12 @@ func TestMoveTablesTrafficSwitchingDryRun(t *testing.T) {
DryRun: true,
},
want: []string{
+ fmt.Sprintf("Mirroring 0.00 percent of traffic from keyspace %s to keyspace %s for tablet types [REPLICA,RDONLY]", sourceKeyspaceName, targetKeyspaceName),
fmt.Sprintf("Lock keyspace %s", sourceKeyspaceName),
fmt.Sprintf("Switch reads for tables [%s] to keyspace %s for tablet types [REPLICA,RDONLY]", tablesStr, targetKeyspaceName),
fmt.Sprintf("Routing rules for tables [%s] will be updated", tablesStr),
fmt.Sprintf("Unlock keyspace %s", sourceKeyspaceName),
+ fmt.Sprintf("Mirroring 0.00 percent of traffic from keyspace %s to keyspace %s for tablet types [PRIMARY]", sourceKeyspaceName, targetKeyspaceName),
fmt.Sprintf("Lock keyspace %s", sourceKeyspaceName),
fmt.Sprintf("Lock keyspace %s", targetKeyspaceName),
fmt.Sprintf("Stop writes on keyspace %s for tables [%s]: [keyspace:%s;shard:-80;position:%s,keyspace:%s;shard:80-;position:%s]",
@@ -723,10 +730,12 @@ func TestMoveTablesTrafficSwitchingDryRun(t *testing.T) {
DryRun: true,
},
want: []string{
+ fmt.Sprintf("Mirroring 0.00 percent of traffic from keyspace %s to keyspace %s for tablet types [REPLICA,RDONLY]", targetKeyspaceName, sourceKeyspaceName),
fmt.Sprintf("Lock keyspace %s", targetKeyspaceName),
fmt.Sprintf("Switch reads for tables [%s] to keyspace %s for tablet types [REPLICA,RDONLY]", tablesStr, targetKeyspaceName),
fmt.Sprintf("Routing rules for tables [%s] will be updated", tablesStr),
fmt.Sprintf("Unlock keyspace %s", targetKeyspaceName),
+ fmt.Sprintf("Mirroring 0.00 percent of traffic from keyspace %s to keyspace %s for tablet types [PRIMARY]", targetKeyspaceName, sourceKeyspaceName),
fmt.Sprintf("Lock keyspace %s", targetKeyspaceName),
fmt.Sprintf("Lock keyspace %s", sourceKeyspaceName),
fmt.Sprintf("Stop writes on keyspace %s for tables [%s]: [keyspace:%s;shard:-80;position:%s,keyspace:%s;shard:80-;position:%s]",
@@ -780,3 +789,416 @@ func TestMoveTablesTrafficSwitchingDryRun(t *testing.T) {
})
}
}
+
+func TestMirrorTraffic(t *testing.T) {
+ ctx := context.Background()
+ sourceKs := "source"
+ sourceShards := []string{"-"}
+ targetKs := "target"
+ targetShards := []string{"-80", "80-"}
+ table1 := "table1"
+ table2 := "table2"
+ workflow := "src2target"
+
+ mirrorRules := map[string]map[string]float32{}
+ routingRules := map[string][]string{
+ fmt.Sprintf("%s.%s@rdonly", sourceKs, table1): {fmt.Sprintf("%s.%s", targetKs, table1)},
+ fmt.Sprintf("%s.%s@rdonly", sourceKs, table2): {fmt.Sprintf("%s.%s", targetKs, table2)},
+ }
+
+ tabletTypes := []topodatapb.TabletType{
+ topodatapb.TabletType_PRIMARY,
+ topodatapb.TabletType_REPLICA,
+ topodatapb.TabletType_RDONLY,
+ }
+
+ tests := []struct {
+ name string
+
+ req *vtctldatapb.WorkflowMirrorTrafficRequest
+ mirrorRules map[string]map[string]float32
+ routingRules map[string][]string
+ setup func(*testing.T, context.Context, *testMaterializerEnv)
+ sourceKeyspace string
+ sourceShards []string
+ targetKeyspace string
+ targetShards []string
+
+ wantErr string
+ wantMirrorRules map[string]map[string]float32
+ }{
+ {
+ name: "no such keyspace",
+ req: &vtctldatapb.WorkflowMirrorTrafficRequest{
+ Keyspace: "no_ks",
+ Workflow: workflow,
+ TabletTypes: tabletTypes,
+ Percent: 50.0,
+ },
+ wantErr: "FindAllShardsInKeyspace(no_ks): List: node doesn't exist: keyspaces/no_ks/shards",
+ wantMirrorRules: make(map[string]map[string]float32),
+ },
+ {
+ name: "no such workflow",
+ req: &vtctldatapb.WorkflowMirrorTrafficRequest{
+ Keyspace: targetKs,
+ Workflow: "no_workflow",
+ TabletTypes: tabletTypes,
+ Percent: 50.0,
+ },
+ setup: func(t *testing.T, ctx context.Context, te *testMaterializerEnv) {
+ te.tmc.readVReplicationWorkflow = func(
+ ctx context.Context,
+ tablet *topodatapb.Tablet,
+ request *tabletmanagerdatapb.ReadVReplicationWorkflowRequest,
+ ) (*tabletmanagerdatapb.ReadVReplicationWorkflowResponse, error) {
+ return nil, nil
+ }
+ },
+ wantErr: "no streams found in keyspace target for no_workflow",
+ wantMirrorRules: make(map[string]map[string]float32),
+ },
+ {
+ name: "cannot mirror traffic for migrate workflows",
+ req: &vtctldatapb.WorkflowMirrorTrafficRequest{
+ Keyspace: targetKs,
+ Workflow: "migrate",
+ TabletTypes: tabletTypes,
+ Percent: 50.0,
+ },
+ setup: func(t *testing.T, ctx context.Context, te *testMaterializerEnv) {
+ te.tmc.readVReplicationWorkflow = createReadVReplicationWorkflowFunc(t, binlogdatapb.VReplicationWorkflowType_Migrate, nil, te.tmc.keyspace, sourceShards, []string{table1, table2})
+ },
+ wantErr: "invalid action for Migrate workflow: MirrorTraffic",
+ wantMirrorRules: make(map[string]map[string]float32),
+ },
+ {
+ name: "cannot mirror traffic for reshard workflows",
+ req: &vtctldatapb.WorkflowMirrorTrafficRequest{
+ Keyspace: sourceKs,
+ Workflow: "reshard",
+ TabletTypes: tabletTypes,
+ Percent: 50.0,
+ },
+ sourceKeyspace: sourceKs,
+ sourceShards: []string{"-80", "80-"},
+ targetKeyspace: sourceKs,
+ targetShards: []string{"-55", "55-aa", "55-"},
+ setup: func(t *testing.T, ctx context.Context, te *testMaterializerEnv) {
+ te.tmc.readVReplicationWorkflow = createReadVReplicationWorkflowFunc(t, binlogdatapb.VReplicationWorkflowType_Reshard, nil, sourceKs, []string{"-80", "80-"}, []string{table1, table2})
+ },
+ wantErr: "invalid action for Reshard workflow: MirrorTraffic",
+ wantMirrorRules: make(map[string]map[string]float32),
+ },
+ {
+ name: "cannot mirror rdonly traffic after switch rdonly traffic",
+ req: &vtctldatapb.WorkflowMirrorTrafficRequest{
+ Keyspace: targetKs,
+ Workflow: workflow,
+ TabletTypes: tabletTypes,
+ Percent: 50.0,
+ },
+ routingRules: map[string][]string{
+ fmt.Sprintf("%s.%s@rdonly", targetKs, table1): {fmt.Sprintf("%s.%s@rdonly", targetKs, table1)},
+ fmt.Sprintf("%s.%s@rdonly", targetKs, table2): {fmt.Sprintf("%s.%s@rdonly", targetKs, table2)},
+ },
+ wantErr: "cannot mirror [rdonly] traffic for workflow src2target at this time: traffic for those tablet types is switched",
+ wantMirrorRules: make(map[string]map[string]float32),
+ },
+ {
+ name: "cannot mirror replica traffic after switch replica traffic",
+ req: &vtctldatapb.WorkflowMirrorTrafficRequest{
+ Keyspace: targetKs,
+ Workflow: workflow,
+ TabletTypes: tabletTypes,
+ Percent: 50.0,
+ },
+ routingRules: map[string][]string{
+ fmt.Sprintf("%s.%s@replica", targetKs, table1): {fmt.Sprintf("%s.%s@replica", targetKs, table1)},
+ fmt.Sprintf("%s.%s@replica", targetKs, table2): {fmt.Sprintf("%s.%s@replica", targetKs, table2)},
+ },
+ wantErr: "cannot mirror [replica] traffic for workflow src2target at this time: traffic for those tablet types is switched",
+ wantMirrorRules: make(map[string]map[string]float32),
+ },
+ {
+ name: "cannot mirror write traffic after switch traffic",
+ req: &vtctldatapb.WorkflowMirrorTrafficRequest{
+ Keyspace: targetKs,
+ Workflow: workflow,
+ TabletTypes: tabletTypes,
+ Percent: 50.0,
+ },
+ routingRules: map[string][]string{
+ table1: {fmt.Sprintf("%s.%s", targetKs, table1)},
+ table2: {fmt.Sprintf("%s.%s", targetKs, table2)},
+ },
+ wantErr: "cannot mirror [primary] traffic for workflow src2target at this time: traffic for those tablet types is switched",
+ wantMirrorRules: make(map[string]map[string]float32),
+ },
+ {
+ name: "does not mirror traffic for partial move tables",
+ req: &vtctldatapb.WorkflowMirrorTrafficRequest{
+ Keyspace: targetKs,
+ Workflow: workflow,
+ TabletTypes: tabletTypes,
+ Percent: 50.0,
+ },
+ setup: func(t *testing.T, ctx context.Context, te *testMaterializerEnv) {
+ te.tmc.readVReplicationWorkflow = func(
+ ctx context.Context,
+ tablet *topodatapb.Tablet,
+ request *tabletmanagerdatapb.ReadVReplicationWorkflowRequest,
+ ) (*tabletmanagerdatapb.ReadVReplicationWorkflowResponse, error) {
+ if tablet.Shard != "-80" {
+ return nil, nil
+ }
+ return &tabletmanagerdatapb.ReadVReplicationWorkflowResponse{
+ Workflow: request.Workflow,
+ WorkflowType: binlogdatapb.VReplicationWorkflowType_MoveTables,
+ Streams: []*tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream{
+ {
+ Id: 1,
+ Bls: &binlogdatapb.BinlogSource{
+ Keyspace: sourceKs,
+ Shard: "-80",
+ Filter: &binlogdatapb.Filter{
+ Rules: []*binlogdatapb.Rule{
+ {Match: table1},
+ {Match: table2},
+ },
+ },
+ },
+ },
+ },
+ }, nil
+ }
+ },
+ sourceShards: []string{"-80", "80-"},
+ targetShards: []string{"-80", "80-"},
+ wantErr: "invalid action for partial migration: MirrorTraffic",
+ wantMirrorRules: make(map[string]map[string]float32),
+ },
+ {
+ name: "does not mirror traffic for multi-tenant move tables",
+ req: &vtctldatapb.WorkflowMirrorTrafficRequest{
+ Keyspace: targetKs,
+ Workflow: workflow,
+ TabletTypes: tabletTypes,
+ Percent: 50.0,
+ },
+ setup: func(t *testing.T, ctx context.Context, te *testMaterializerEnv) {
+ te.tmc.readVReplicationWorkflow = createReadVReplicationWorkflowFunc(t, binlogdatapb.VReplicationWorkflowType_MoveTables, &vtctldatapb.WorkflowOptions{TenantId: "123"}, te.tmc.keyspace, sourceShards, []string{table1, table2})
+ },
+ wantErr: "invalid action for multi-tenant migration: MirrorTraffic",
+ wantMirrorRules: make(map[string]map[string]float32),
+ },
+ {
+ name: "does not mirror traffic for reverse move tables",
+ req: &vtctldatapb.WorkflowMirrorTrafficRequest{
+ Keyspace: targetKs,
+ Workflow: workflow + "_reverse",
+ TabletTypes: tabletTypes,
+ Percent: 50.0,
+ },
+ wantErr: "invalid action for reverse workflow: MirrorTraffic",
+ wantMirrorRules: make(map[string]map[string]float32),
+ },
+ {
+ name: "ok",
+ req: &vtctldatapb.WorkflowMirrorTrafficRequest{
+ Keyspace: targetKs,
+ Workflow: workflow,
+ TabletTypes: tabletTypes,
+ Percent: 50.0,
+ },
+ wantMirrorRules: map[string]map[string]float32{
+ fmt.Sprintf("%s.%s", sourceKs, table1): {
+ fmt.Sprintf("%s.%s", targetKs, table1): 50.0,
+ },
+ fmt.Sprintf("%s.%s@replica", sourceKs, table1): {
+ fmt.Sprintf("%s.%s", targetKs, table1): 50.0,
+ },
+ fmt.Sprintf("%s.%s@rdonly", sourceKs, table1): {
+ fmt.Sprintf("%s.%s", targetKs, table1): 50.0,
+ },
+ fmt.Sprintf("%s.%s", sourceKs, table2): {
+ fmt.Sprintf("%s.%s", targetKs, table2): 50.0,
+ },
+ fmt.Sprintf("%s.%s@replica", sourceKs, table2): {
+ fmt.Sprintf("%s.%s", targetKs, table2): 50.0,
+ },
+ fmt.Sprintf("%s.%s@rdonly", sourceKs, table2): {
+ fmt.Sprintf("%s.%s", targetKs, table2): 50.0,
+ },
+ },
+ },
+ {
+ name: "does not overwrite unrelated mirror rules",
+ mirrorRules: map[string]map[string]float32{
+ "other_source.table2": {
+ fmt.Sprintf("%s.table2", targetKs): 25.0,
+ },
+ },
+ req: &vtctldatapb.WorkflowMirrorTrafficRequest{
+ Keyspace: targetKs,
+ Workflow: workflow,
+ TabletTypes: tabletTypes,
+ Percent: 50.0,
+ },
+ wantMirrorRules: map[string]map[string]float32{
+ fmt.Sprintf("%s.%s", sourceKs, table1): {
+ fmt.Sprintf("%s.%s", targetKs, table1): 50.0,
+ },
+ fmt.Sprintf("%s.%s@replica", sourceKs, table1): {
+ fmt.Sprintf("%s.%s", targetKs, table1): 50.0,
+ },
+ fmt.Sprintf("%s.%s@rdonly", sourceKs, table1): {
+ fmt.Sprintf("%s.%s", targetKs, table1): 50.0,
+ },
+ fmt.Sprintf("%s.%s", sourceKs, table2): {
+ fmt.Sprintf("%s.%s", targetKs, table2): 50.0,
+ },
+ fmt.Sprintf("%s.%s@replica", sourceKs, table2): {
+ fmt.Sprintf("%s.%s", targetKs, table2): 50.0,
+ },
+ fmt.Sprintf("%s.%s@rdonly", sourceKs, table2): {
+ fmt.Sprintf("%s.%s", targetKs, table2): 50.0,
+ },
+ "other_source.table2": {
+ fmt.Sprintf("%s.table2", targetKs): 25.0,
+ },
+ },
+ },
+ {
+ name: "does not overwrite when some but not all mirror rules already exist",
+ mirrorRules: map[string]map[string]float32{
+ fmt.Sprintf("%s.%s", sourceKs, table1): {
+ fmt.Sprintf("%s.%s", targetKs, table1): 25.0,
+ },
+ fmt.Sprintf("%s.%s@replica", sourceKs, table1): {
+ fmt.Sprintf("%s.%s", targetKs, table1): 25.0,
+ },
+ fmt.Sprintf("%s.%s@rdonly", sourceKs, table1): {
+ fmt.Sprintf("%s.%s", targetKs, table1): 25.0,
+ },
+ },
+ req: &vtctldatapb.WorkflowMirrorTrafficRequest{
+ Keyspace: targetKs,
+ Workflow: workflow,
+ TabletTypes: tabletTypes,
+ Percent: 50.0,
+ },
+ wantErr: "wrong number of pre-existing mirror rules",
+ wantMirrorRules: map[string]map[string]float32{
+ fmt.Sprintf("%s.%s", sourceKs, table1): {
+ fmt.Sprintf("%s.%s", targetKs, table1): 25.0,
+ },
+ fmt.Sprintf("%s.%s@replica", sourceKs, table1): {
+ fmt.Sprintf("%s.%s", targetKs, table1): 25.0,
+ },
+ fmt.Sprintf("%s.%s@rdonly", sourceKs, table1): {
+ fmt.Sprintf("%s.%s", targetKs, table1): 25.0,
+ },
+ },
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ if tt.mirrorRules == nil {
+ tt.mirrorRules = mirrorRules
+ }
+ if tt.routingRules == nil {
+ tt.routingRules = routingRules
+ }
+ if tt.sourceKeyspace == "" {
+ tt.sourceKeyspace = sourceKs
+ }
+ if tt.sourceShards == nil {
+ tt.sourceShards = sourceShards
+ }
+ if tt.targetKeyspace == "" {
+ tt.targetKeyspace = targetKs
+ }
+ if tt.targetShards == nil {
+ tt.targetShards = targetShards
+ }
+
+ te := newTestMaterializerEnv(t, ctx, &vtctldatapb.MaterializeSettings{
+ SourceKeyspace: tt.sourceKeyspace,
+ TargetKeyspace: tt.targetKeyspace,
+ Workflow: workflow,
+ TableSettings: []*vtctldatapb.TableMaterializeSettings{
+ {
+ TargetTable: table1,
+ SourceExpression: fmt.Sprintf("select * from %s", table1),
+ },
+ {
+ TargetTable: table2,
+ SourceExpression: fmt.Sprintf("select * from %s", table2),
+ },
+ },
+ }, tt.sourceShards, tt.targetShards)
+
+ require.NoError(t, topotools.SaveMirrorRules(ctx, te.topoServ, tt.mirrorRules))
+ require.NoError(t, topotools.SaveRoutingRules(ctx, te.topoServ, tt.routingRules))
+ require.NoError(t, te.topoServ.RebuildSrvVSchema(ctx, []string{te.cell}))
+
+ if tt.setup != nil {
+ tt.setup(t, ctx, te)
+ }
+
+ got, err := te.ws.WorkflowMirrorTraffic(ctx, tt.req)
+ if tt.wantErr != "" {
+ require.EqualError(t, err, tt.wantErr)
+ } else {
+ require.NoError(t, err)
+ require.NotNil(t, got)
+ }
+ mr, err := topotools.GetMirrorRules(ctx, te.topoServ)
+ require.NoError(t, err)
+ wantMirrorRules := tt.mirrorRules
+ if tt.wantMirrorRules != nil {
+ wantMirrorRules = tt.wantMirrorRules
+ }
+ require.Equal(t, wantMirrorRules, mr)
+ })
+ }
+}
+
+func createReadVReplicationWorkflowFunc(t *testing.T, workflowType binlogdatapb.VReplicationWorkflowType, workflowOptions *vtctldatapb.WorkflowOptions, sourceKeyspace string, sourceShards []string, sourceTables []string) readVReplicationWorkflowFunc {
+ return func(ctx context.Context, tablet *topodatapb.Tablet, request *tabletmanagerdatapb.ReadVReplicationWorkflowRequest) (*tabletmanagerdatapb.ReadVReplicationWorkflowResponse, error) {
+ streams := make([]*tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream, 0)
+ for i, shard := range sourceShards {
+ if shard == tablet.Shard {
+ return nil, nil
+ }
+ rules := make([]*binlogdatapb.Rule, len(sourceTables))
+ for i, table := range sourceTables {
+ rules[i] = &binlogdatapb.Rule{Match: table}
+ }
+ streams = append(streams, &tabletmanagerdatapb.ReadVReplicationWorkflowResponse_Stream{
+ Id: int32(i + 1),
+ Bls: &binlogdatapb.BinlogSource{
+ Keyspace: sourceKeyspace,
+ Shard: shard,
+ Filter: &binlogdatapb.Filter{Rules: rules},
+ },
+ })
+ }
+
+ var err error
+ var options []byte
+ if workflowOptions != nil {
+ options, err = json.Marshal(workflowOptions)
+ require.NoError(t, err)
+ }
+
+ return &tabletmanagerdatapb.ReadVReplicationWorkflowResponse{
+ Workflow: request.Workflow,
+ Options: string(options),
+ WorkflowType: workflowType,
+ Streams: streams,
+ }, nil
+ }
+}
diff --git a/go/vt/vtctl/workflow/state.go b/go/vt/vtctl/workflow/state.go
index 927f5a9db56..9d2d1f23def 100644
--- a/go/vt/vtctl/workflow/state.go
+++ b/go/vt/vtctl/workflow/state.go
@@ -61,6 +61,7 @@ type State struct {
SourceKeyspace string
TargetKeyspace string
WorkflowType Type
+ IsReverse bool
ReplicaCellsSwitched []string
ReplicaCellsNotSwitched []string
diff --git a/go/vt/vtctl/workflow/switcher.go b/go/vt/vtctl/workflow/switcher.go
index aa41655aab8..3fbd1c507e2 100644
--- a/go/vt/vtctl/workflow/switcher.go
+++ b/go/vt/vtctl/workflow/switcher.go
@@ -161,3 +161,7 @@ func (r *switcher) resetSequences(ctx context.Context) error {
func (r *switcher) initializeTargetSequences(ctx context.Context, sequencesByBackingTable map[string]*sequenceMetadata) error {
return r.ts.initializeTargetSequences(ctx, sequencesByBackingTable)
}
+
+func (r *switcher) mirrorTableTraffic(ctx context.Context, types []topodatapb.TabletType, percent float32) error {
+ return r.ts.mirrorTableTraffic(ctx, types, percent)
+}
diff --git a/go/vt/vtctl/workflow/switcher_dry_run.go b/go/vt/vtctl/workflow/switcher_dry_run.go
index b8b1369bdf7..55c843b07cb 100644
--- a/go/vt/vtctl/workflow/switcher_dry_run.go
+++ b/go/vt/vtctl/workflow/switcher_dry_run.go
@@ -63,6 +63,17 @@ func (dr *switcherDryRun) deleteKeyspaceRoutingRules(ctx context.Context) error
return nil
}
+func (dr *switcherDryRun) mirrorTableTraffic(ctx context.Context, types []topodatapb.TabletType, percent float32) error {
+ var tabletTypes []string
+ for _, servedType := range types {
+ tabletTypes = append(tabletTypes, servedType.String())
+ }
+ dr.drLog.Logf("Mirroring %.2f percent of traffic from keyspace %s to keyspace %s for tablet types [%s]",
+ percent, dr.ts.SourceKeyspaceName(), dr.ts.TargetKeyspaceName(), strings.Join(tabletTypes, ","))
+
+ return nil
+}
+
func (dr *switcherDryRun) switchKeyspaceReads(ctx context.Context, types []topodatapb.TabletType) error {
var tabletTypes []string
for _, servedType := range types {
diff --git a/go/vt/vtctl/workflow/switcher_interface.go b/go/vt/vtctl/workflow/switcher_interface.go
index 0780aaf484c..9dea0af30a1 100644
--- a/go/vt/vtctl/workflow/switcher_interface.go
+++ b/go/vt/vtctl/workflow/switcher_interface.go
@@ -34,6 +34,7 @@ type iswitcher interface {
createJournals(ctx context.Context, sourceWorkflows []string) error
allowTargetWrites(ctx context.Context) error
changeRouting(ctx context.Context) error
+ mirrorTableTraffic(ctx context.Context, types []topodatapb.TabletType, percent float32) error
streamMigraterfinalize(ctx context.Context, ts *trafficSwitcher, workflows []string) error
startReverseVReplication(ctx context.Context) error
switchKeyspaceReads(ctx context.Context, types []topodatapb.TabletType) error
diff --git a/go/vt/vtctl/workflow/traffic_switcher.go b/go/vt/vtctl/workflow/traffic_switcher.go
index 7511315af15..954f4e6a9b3 100644
--- a/go/vt/vtctl/workflow/traffic_switcher.go
+++ b/go/vt/vtctl/workflow/traffic_switcher.go
@@ -353,7 +353,7 @@ func (ts *trafficSwitcher) getSourceAndTargetShardsNames() ([]string, []string)
return sourceShards, targetShards
}
-// isPartialMoveTables returns true if whe workflow is MoveTables, has the same
+// isPartialMoveTables returns true if the workflow is MoveTables, has the same
// number of shards, is not covering the entire shard range, and has one-to-one
// shards in source and target.
func (ts *trafficSwitcher) isPartialMoveTables(sourceShards, targetShards []string) (bool, error) {
@@ -1745,3 +1745,50 @@ func (ts *trafficSwitcher) IsMultiTenantMigration() bool {
}
return false
}
+
+func (ts *trafficSwitcher) mirrorTableTraffic(ctx context.Context, types []topodatapb.TabletType, percent float32) error {
+ log.Infof("mirrorTableTraffic")
+
+ mrs, err := topotools.GetMirrorRules(ctx, ts.TopoServer())
+ if err != nil {
+ return err
+ }
+
+ var numExisting int
+ for _, table := range ts.tables {
+ for _, tabletType := range types {
+ fromTable := fmt.Sprintf("%s.%s", ts.SourceKeyspaceName(), table)
+ if tabletType != topodatapb.TabletType_PRIMARY {
+ fromTable = fmt.Sprintf("%s@%s", fromTable, topoproto.TabletTypeLString(tabletType))
+ }
+ toTable := fmt.Sprintf("%s.%s", ts.TargetKeyspaceName(), table)
+
+ if _, ok := mrs[fromTable]; !ok {
+ mrs[fromTable] = make(map[string]float32)
+ }
+
+ if _, ok := mrs[fromTable][toTable]; ok {
+ numExisting++
+ }
+
+ if percent == 0 {
+ // When percent is 0, remove mirror rule if it exists.
+ if _, ok := mrs[fromTable][toTable]; ok {
+ delete(mrs, fromTable)
+ }
+ } else {
+ mrs[fromTable][toTable] = percent
+ }
+ }
+ }
+
+ if numExisting > 0 && numExisting != (len(types)*len(ts.tables)) {
+ return vterrors.Errorf(vtrpcpb.Code_ALREADY_EXISTS, "wrong number of pre-existing mirror rules")
+ }
+
+ if err := topotools.SaveMirrorRules(ctx, ts.TopoServer(), mrs); err != nil {
+ return err
+ }
+
+ return ts.TopoServer().RebuildSrvVSchema(ctx, nil)
+}
diff --git a/proto/vschema.proto b/proto/vschema.proto
index dd327f863dc..f0d12278fcd 100644
--- a/proto/vschema.proto
+++ b/proto/vschema.proto
@@ -153,6 +153,7 @@ message SrvVSchema {
RoutingRules routing_rules = 2; // table routing rules
ShardRoutingRules shard_routing_rules = 3;
KeyspaceRoutingRules keyspace_routing_rules = 4;
+ MirrorRules mirror_rules = 5; // mirror rules
}
// ShardRoutingRules specify the shard routing rules for the VSchema.
@@ -176,3 +177,17 @@ message KeyspaceRoutingRule {
string to_keyspace = 2;
}
+// MirrorRules specify the high level mirror rules for the VSchema.
+message MirrorRules {
+ // rules should ideally be a map. However protos dont't allow
+ // repeated fields as elements of a map. So, we use a list
+ // instead.
+ repeated MirrorRule rules = 1;
+}
+
+// MirrorRule specifies a mirror rule.
+message MirrorRule {
+ string from_table = 1;
+ string to_table = 2;
+ float percent = 3;
+}
diff --git a/proto/vtctldata.proto b/proto/vtctldata.proto
index 0d2f2d1441e..398357c0423 100644
--- a/proto/vtctldata.proto
+++ b/proto/vtctldata.proto
@@ -2080,3 +2080,23 @@ message WorkflowUpdateResponse {
string summary = 1;
repeated TabletInfo details = 2;
}
+
+message GetMirrorRulesRequest {
+}
+
+message GetMirrorRulesResponse {
+ vschema.MirrorRules mirror_rules = 1;
+}
+
+message WorkflowMirrorTrafficRequest {
+ string keyspace = 1;
+ string workflow = 2;
+ repeated topodata.TabletType tablet_types = 3;
+ float percent = 4;
+}
+
+message WorkflowMirrorTrafficResponse {
+ string summary = 1;
+ string start_state = 2;
+ string current_state = 3;
+}
diff --git a/proto/vtctlservice.proto b/proto/vtctlservice.proto
index 45100cd3d74..672374038b5 100644
--- a/proto/vtctlservice.proto
+++ b/proto/vtctlservice.proto
@@ -364,4 +364,7 @@ service Vtctld {
// WorkflowUpdate updates the configuration of a vreplication workflow
// using the provided updated parameters.
rpc WorkflowUpdate(vtctldata.WorkflowUpdateRequest) returns (vtctldata.WorkflowUpdateResponse) {};
+ // GetMirrorRules returns the VSchema routing rules.
+ rpc GetMirrorRules(vtctldata.GetMirrorRulesRequest) returns (vtctldata.GetMirrorRulesResponse) {};
+ rpc WorkflowMirrorTraffic(vtctldata.WorkflowMirrorTrafficRequest) returns (vtctldata.WorkflowMirrorTrafficResponse) {};
}
diff --git a/proto/vttest.proto b/proto/vttest.proto
index b48107044d7..fdabe7c40f5 100644
--- a/proto/vttest.proto
+++ b/proto/vttest.proto
@@ -94,4 +94,7 @@ message VTTestTopology {
// routing rules for the topology.
vschema.RoutingRules routing_rules = 3;
+
+ // mirror rules for the topology.
+ vschema.MirrorRules mirror_rules = 4;
}
diff --git a/web/vtadmin/src/proto/vtadmin.d.ts b/web/vtadmin/src/proto/vtadmin.d.ts
index 021ece60596..67b1fca3d05 100644
--- a/web/vtadmin/src/proto/vtadmin.d.ts
+++ b/web/vtadmin/src/proto/vtadmin.d.ts
@@ -45018,6 +45018,9 @@ export namespace vschema {
/** SrvVSchema keyspace_routing_rules */
keyspace_routing_rules?: (vschema.IKeyspaceRoutingRules|null);
+
+ /** SrvVSchema mirror_rules */
+ mirror_rules?: (vschema.IMirrorRules|null);
}
/** Represents a SrvVSchema. */
@@ -45041,6 +45044,9 @@ export namespace vschema {
/** SrvVSchema keyspace_routing_rules. */
public keyspace_routing_rules?: (vschema.IKeyspaceRoutingRules|null);
+ /** SrvVSchema mirror_rules. */
+ public mirror_rules?: (vschema.IMirrorRules|null);
+
/**
* Creates a new SrvVSchema instance using the specified properties.
* @param [properties] Properties to set
@@ -45524,6 +45530,212 @@ export namespace vschema {
*/
public static getTypeUrl(typeUrlPrefix?: string): string;
}
+
+ /** Properties of a MirrorRules. */
+ interface IMirrorRules {
+
+ /** MirrorRules rules */
+ rules?: (vschema.IMirrorRule[]|null);
+ }
+
+ /** Represents a MirrorRules. */
+ class MirrorRules implements IMirrorRules {
+
+ /**
+ * Constructs a new MirrorRules.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: vschema.IMirrorRules);
+
+ /** MirrorRules rules. */
+ public rules: vschema.IMirrorRule[];
+
+ /**
+ * Creates a new MirrorRules instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns MirrorRules instance
+ */
+ public static create(properties?: vschema.IMirrorRules): vschema.MirrorRules;
+
+ /**
+ * Encodes the specified MirrorRules message. Does not implicitly {@link vschema.MirrorRules.verify|verify} messages.
+ * @param message MirrorRules message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: vschema.IMirrorRules, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified MirrorRules message, length delimited. Does not implicitly {@link vschema.MirrorRules.verify|verify} messages.
+ * @param message MirrorRules message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: vschema.IMirrorRules, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a MirrorRules message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns MirrorRules
+ * @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): vschema.MirrorRules;
+
+ /**
+ * Decodes a MirrorRules message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns MirrorRules
+ * @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)): vschema.MirrorRules;
+
+ /**
+ * Verifies a MirrorRules 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 MirrorRules message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns MirrorRules
+ */
+ public static fromObject(object: { [k: string]: any }): vschema.MirrorRules;
+
+ /**
+ * Creates a plain object from a MirrorRules message. Also converts values to other types if specified.
+ * @param message MirrorRules
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: vschema.MirrorRules, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this MirrorRules to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for MirrorRules
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a MirrorRule. */
+ interface IMirrorRule {
+
+ /** MirrorRule from_table */
+ from_table?: (string|null);
+
+ /** MirrorRule to_table */
+ to_table?: (string|null);
+
+ /** MirrorRule percent */
+ percent?: (number|null);
+ }
+
+ /** Represents a MirrorRule. */
+ class MirrorRule implements IMirrorRule {
+
+ /**
+ * Constructs a new MirrorRule.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: vschema.IMirrorRule);
+
+ /** MirrorRule from_table. */
+ public from_table: string;
+
+ /** MirrorRule to_table. */
+ public to_table: string;
+
+ /** MirrorRule percent. */
+ public percent: number;
+
+ /**
+ * Creates a new MirrorRule instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns MirrorRule instance
+ */
+ public static create(properties?: vschema.IMirrorRule): vschema.MirrorRule;
+
+ /**
+ * Encodes the specified MirrorRule message. Does not implicitly {@link vschema.MirrorRule.verify|verify} messages.
+ * @param message MirrorRule message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: vschema.IMirrorRule, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified MirrorRule message, length delimited. Does not implicitly {@link vschema.MirrorRule.verify|verify} messages.
+ * @param message MirrorRule message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: vschema.IMirrorRule, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a MirrorRule message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns MirrorRule
+ * @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): vschema.MirrorRule;
+
+ /**
+ * Decodes a MirrorRule message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns MirrorRule
+ * @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)): vschema.MirrorRule;
+
+ /**
+ * Verifies a MirrorRule 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 MirrorRule message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns MirrorRule
+ */
+ public static fromObject(object: { [k: string]: any }): vschema.MirrorRule;
+
+ /**
+ * Creates a plain object from a MirrorRule message. Also converts values to other types if specified.
+ * @param message MirrorRule
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: vschema.MirrorRule, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this MirrorRule to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for MirrorRule
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
}
/** Namespace vtctldata. */
@@ -73976,4 +74188,416 @@ export namespace vtctldata {
public static getTypeUrl(typeUrlPrefix?: string): string;
}
}
+
+ /** Properties of a GetMirrorRulesRequest. */
+ interface IGetMirrorRulesRequest {
+ }
+
+ /** Represents a GetMirrorRulesRequest. */
+ class GetMirrorRulesRequest implements IGetMirrorRulesRequest {
+
+ /**
+ * Constructs a new GetMirrorRulesRequest.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: vtctldata.IGetMirrorRulesRequest);
+
+ /**
+ * Creates a new GetMirrorRulesRequest instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns GetMirrorRulesRequest instance
+ */
+ public static create(properties?: vtctldata.IGetMirrorRulesRequest): vtctldata.GetMirrorRulesRequest;
+
+ /**
+ * Encodes the specified GetMirrorRulesRequest message. Does not implicitly {@link vtctldata.GetMirrorRulesRequest.verify|verify} messages.
+ * @param message GetMirrorRulesRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: vtctldata.IGetMirrorRulesRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified GetMirrorRulesRequest message, length delimited. Does not implicitly {@link vtctldata.GetMirrorRulesRequest.verify|verify} messages.
+ * @param message GetMirrorRulesRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: vtctldata.IGetMirrorRulesRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a GetMirrorRulesRequest message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns GetMirrorRulesRequest
+ * @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.GetMirrorRulesRequest;
+
+ /**
+ * Decodes a GetMirrorRulesRequest message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns GetMirrorRulesRequest
+ * @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.GetMirrorRulesRequest;
+
+ /**
+ * Verifies a GetMirrorRulesRequest 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 GetMirrorRulesRequest message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns GetMirrorRulesRequest
+ */
+ public static fromObject(object: { [k: string]: any }): vtctldata.GetMirrorRulesRequest;
+
+ /**
+ * Creates a plain object from a GetMirrorRulesRequest message. Also converts values to other types if specified.
+ * @param message GetMirrorRulesRequest
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: vtctldata.GetMirrorRulesRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this GetMirrorRulesRequest to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for GetMirrorRulesRequest
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a GetMirrorRulesResponse. */
+ interface IGetMirrorRulesResponse {
+
+ /** GetMirrorRulesResponse mirror_rules */
+ mirror_rules?: (vschema.IMirrorRules|null);
+ }
+
+ /** Represents a GetMirrorRulesResponse. */
+ class GetMirrorRulesResponse implements IGetMirrorRulesResponse {
+
+ /**
+ * Constructs a new GetMirrorRulesResponse.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: vtctldata.IGetMirrorRulesResponse);
+
+ /** GetMirrorRulesResponse mirror_rules. */
+ public mirror_rules?: (vschema.IMirrorRules|null);
+
+ /**
+ * Creates a new GetMirrorRulesResponse instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns GetMirrorRulesResponse instance
+ */
+ public static create(properties?: vtctldata.IGetMirrorRulesResponse): vtctldata.GetMirrorRulesResponse;
+
+ /**
+ * Encodes the specified GetMirrorRulesResponse message. Does not implicitly {@link vtctldata.GetMirrorRulesResponse.verify|verify} messages.
+ * @param message GetMirrorRulesResponse message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: vtctldata.IGetMirrorRulesResponse, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified GetMirrorRulesResponse message, length delimited. Does not implicitly {@link vtctldata.GetMirrorRulesResponse.verify|verify} messages.
+ * @param message GetMirrorRulesResponse message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: vtctldata.IGetMirrorRulesResponse, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a GetMirrorRulesResponse message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns GetMirrorRulesResponse
+ * @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.GetMirrorRulesResponse;
+
+ /**
+ * Decodes a GetMirrorRulesResponse message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns GetMirrorRulesResponse
+ * @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.GetMirrorRulesResponse;
+
+ /**
+ * Verifies a GetMirrorRulesResponse 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 GetMirrorRulesResponse message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns GetMirrorRulesResponse
+ */
+ public static fromObject(object: { [k: string]: any }): vtctldata.GetMirrorRulesResponse;
+
+ /**
+ * Creates a plain object from a GetMirrorRulesResponse message. Also converts values to other types if specified.
+ * @param message GetMirrorRulesResponse
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: vtctldata.GetMirrorRulesResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this GetMirrorRulesResponse to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for GetMirrorRulesResponse
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a WorkflowMirrorTrafficRequest. */
+ interface IWorkflowMirrorTrafficRequest {
+
+ /** WorkflowMirrorTrafficRequest keyspace */
+ keyspace?: (string|null);
+
+ /** WorkflowMirrorTrafficRequest workflow */
+ workflow?: (string|null);
+
+ /** WorkflowMirrorTrafficRequest tablet_types */
+ tablet_types?: (topodata.TabletType[]|null);
+
+ /** WorkflowMirrorTrafficRequest percent */
+ percent?: (number|null);
+ }
+
+ /** Represents a WorkflowMirrorTrafficRequest. */
+ class WorkflowMirrorTrafficRequest implements IWorkflowMirrorTrafficRequest {
+
+ /**
+ * Constructs a new WorkflowMirrorTrafficRequest.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: vtctldata.IWorkflowMirrorTrafficRequest);
+
+ /** WorkflowMirrorTrafficRequest keyspace. */
+ public keyspace: string;
+
+ /** WorkflowMirrorTrafficRequest workflow. */
+ public workflow: string;
+
+ /** WorkflowMirrorTrafficRequest tablet_types. */
+ public tablet_types: topodata.TabletType[];
+
+ /** WorkflowMirrorTrafficRequest percent. */
+ public percent: number;
+
+ /**
+ * Creates a new WorkflowMirrorTrafficRequest instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns WorkflowMirrorTrafficRequest instance
+ */
+ public static create(properties?: vtctldata.IWorkflowMirrorTrafficRequest): vtctldata.WorkflowMirrorTrafficRequest;
+
+ /**
+ * Encodes the specified WorkflowMirrorTrafficRequest message. Does not implicitly {@link vtctldata.WorkflowMirrorTrafficRequest.verify|verify} messages.
+ * @param message WorkflowMirrorTrafficRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: vtctldata.IWorkflowMirrorTrafficRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified WorkflowMirrorTrafficRequest message, length delimited. Does not implicitly {@link vtctldata.WorkflowMirrorTrafficRequest.verify|verify} messages.
+ * @param message WorkflowMirrorTrafficRequest message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: vtctldata.IWorkflowMirrorTrafficRequest, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a WorkflowMirrorTrafficRequest message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns WorkflowMirrorTrafficRequest
+ * @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.WorkflowMirrorTrafficRequest;
+
+ /**
+ * Decodes a WorkflowMirrorTrafficRequest message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns WorkflowMirrorTrafficRequest
+ * @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.WorkflowMirrorTrafficRequest;
+
+ /**
+ * Verifies a WorkflowMirrorTrafficRequest 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 WorkflowMirrorTrafficRequest message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns WorkflowMirrorTrafficRequest
+ */
+ public static fromObject(object: { [k: string]: any }): vtctldata.WorkflowMirrorTrafficRequest;
+
+ /**
+ * Creates a plain object from a WorkflowMirrorTrafficRequest message. Also converts values to other types if specified.
+ * @param message WorkflowMirrorTrafficRequest
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: vtctldata.WorkflowMirrorTrafficRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this WorkflowMirrorTrafficRequest to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for WorkflowMirrorTrafficRequest
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a WorkflowMirrorTrafficResponse. */
+ interface IWorkflowMirrorTrafficResponse {
+
+ /** WorkflowMirrorTrafficResponse summary */
+ summary?: (string|null);
+
+ /** WorkflowMirrorTrafficResponse start_state */
+ start_state?: (string|null);
+
+ /** WorkflowMirrorTrafficResponse current_state */
+ current_state?: (string|null);
+ }
+
+ /** Represents a WorkflowMirrorTrafficResponse. */
+ class WorkflowMirrorTrafficResponse implements IWorkflowMirrorTrafficResponse {
+
+ /**
+ * Constructs a new WorkflowMirrorTrafficResponse.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: vtctldata.IWorkflowMirrorTrafficResponse);
+
+ /** WorkflowMirrorTrafficResponse summary. */
+ public summary: string;
+
+ /** WorkflowMirrorTrafficResponse start_state. */
+ public start_state: string;
+
+ /** WorkflowMirrorTrafficResponse current_state. */
+ public current_state: string;
+
+ /**
+ * Creates a new WorkflowMirrorTrafficResponse instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns WorkflowMirrorTrafficResponse instance
+ */
+ public static create(properties?: vtctldata.IWorkflowMirrorTrafficResponse): vtctldata.WorkflowMirrorTrafficResponse;
+
+ /**
+ * Encodes the specified WorkflowMirrorTrafficResponse message. Does not implicitly {@link vtctldata.WorkflowMirrorTrafficResponse.verify|verify} messages.
+ * @param message WorkflowMirrorTrafficResponse message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: vtctldata.IWorkflowMirrorTrafficResponse, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified WorkflowMirrorTrafficResponse message, length delimited. Does not implicitly {@link vtctldata.WorkflowMirrorTrafficResponse.verify|verify} messages.
+ * @param message WorkflowMirrorTrafficResponse message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: vtctldata.IWorkflowMirrorTrafficResponse, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a WorkflowMirrorTrafficResponse message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns WorkflowMirrorTrafficResponse
+ * @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.WorkflowMirrorTrafficResponse;
+
+ /**
+ * Decodes a WorkflowMirrorTrafficResponse message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns WorkflowMirrorTrafficResponse
+ * @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.WorkflowMirrorTrafficResponse;
+
+ /**
+ * Verifies a WorkflowMirrorTrafficResponse 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 WorkflowMirrorTrafficResponse message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns WorkflowMirrorTrafficResponse
+ */
+ public static fromObject(object: { [k: string]: any }): vtctldata.WorkflowMirrorTrafficResponse;
+
+ /**
+ * Creates a plain object from a WorkflowMirrorTrafficResponse message. Also converts values to other types if specified.
+ * @param message WorkflowMirrorTrafficResponse
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: vtctldata.WorkflowMirrorTrafficResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this WorkflowMirrorTrafficResponse to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for WorkflowMirrorTrafficResponse
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
}
diff --git a/web/vtadmin/src/proto/vtadmin.js b/web/vtadmin/src/proto/vtadmin.js
index eca2d8aa0e7..f36e43dadec 100644
--- a/web/vtadmin/src/proto/vtadmin.js
+++ b/web/vtadmin/src/proto/vtadmin.js
@@ -110457,6 +110457,7 @@ export const vschema = $root.vschema = (() => {
* @property {vschema.IRoutingRules|null} [routing_rules] SrvVSchema routing_rules
* @property {vschema.IShardRoutingRules|null} [shard_routing_rules] SrvVSchema shard_routing_rules
* @property {vschema.IKeyspaceRoutingRules|null} [keyspace_routing_rules] SrvVSchema keyspace_routing_rules
+ * @property {vschema.IMirrorRules|null} [mirror_rules] SrvVSchema mirror_rules
*/
/**
@@ -110507,6 +110508,14 @@ export const vschema = $root.vschema = (() => {
*/
SrvVSchema.prototype.keyspace_routing_rules = null;
+ /**
+ * SrvVSchema mirror_rules.
+ * @member {vschema.IMirrorRules|null|undefined} mirror_rules
+ * @memberof vschema.SrvVSchema
+ * @instance
+ */
+ SrvVSchema.prototype.mirror_rules = null;
+
/**
* Creates a new SrvVSchema instance using the specified properties.
* @function create
@@ -110542,6 +110551,8 @@ export const vschema = $root.vschema = (() => {
$root.vschema.ShardRoutingRules.encode(message.shard_routing_rules, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
if (message.keyspace_routing_rules != null && Object.hasOwnProperty.call(message, "keyspace_routing_rules"))
$root.vschema.KeyspaceRoutingRules.encode(message.keyspace_routing_rules, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
+ if (message.mirror_rules != null && Object.hasOwnProperty.call(message, "mirror_rules"))
+ $root.vschema.MirrorRules.encode(message.mirror_rules, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();
return writer;
};
@@ -110611,6 +110622,10 @@ export const vschema = $root.vschema = (() => {
message.keyspace_routing_rules = $root.vschema.KeyspaceRoutingRules.decode(reader, reader.uint32());
break;
}
+ case 5: {
+ message.mirror_rules = $root.vschema.MirrorRules.decode(reader, reader.uint32());
+ break;
+ }
default:
reader.skipType(tag & 7);
break;
@@ -110671,6 +110686,11 @@ export const vschema = $root.vschema = (() => {
if (error)
return "keyspace_routing_rules." + error;
}
+ if (message.mirror_rules != null && message.hasOwnProperty("mirror_rules")) {
+ let error = $root.vschema.MirrorRules.verify(message.mirror_rules);
+ if (error)
+ return "mirror_rules." + error;
+ }
return null;
};
@@ -110711,6 +110731,11 @@ export const vschema = $root.vschema = (() => {
throw TypeError(".vschema.SrvVSchema.keyspace_routing_rules: object expected");
message.keyspace_routing_rules = $root.vschema.KeyspaceRoutingRules.fromObject(object.keyspace_routing_rules);
}
+ if (object.mirror_rules != null) {
+ if (typeof object.mirror_rules !== "object")
+ throw TypeError(".vschema.SrvVSchema.mirror_rules: object expected");
+ message.mirror_rules = $root.vschema.MirrorRules.fromObject(object.mirror_rules);
+ }
return message;
};
@@ -110733,6 +110758,7 @@ export const vschema = $root.vschema = (() => {
object.routing_rules = null;
object.shard_routing_rules = null;
object.keyspace_routing_rules = null;
+ object.mirror_rules = null;
}
let keys2;
if (message.keyspaces && (keys2 = Object.keys(message.keyspaces)).length) {
@@ -110746,6 +110772,8 @@ export const vschema = $root.vschema = (() => {
object.shard_routing_rules = $root.vschema.ShardRoutingRules.toObject(message.shard_routing_rules, options);
if (message.keyspace_routing_rules != null && message.hasOwnProperty("keyspace_routing_rules"))
object.keyspace_routing_rules = $root.vschema.KeyspaceRoutingRules.toObject(message.keyspace_routing_rules, options);
+ if (message.mirror_rules != null && message.hasOwnProperty("mirror_rules"))
+ object.mirror_rules = $root.vschema.MirrorRules.toObject(message.mirror_rules, options);
return object;
};
@@ -111703,6 +111731,480 @@ export const vschema = $root.vschema = (() => {
return KeyspaceRoutingRule;
})();
+ vschema.MirrorRules = (function() {
+
+ /**
+ * Properties of a MirrorRules.
+ * @memberof vschema
+ * @interface IMirrorRules
+ * @property {Array.|null} [rules] MirrorRules rules
+ */
+
+ /**
+ * Constructs a new MirrorRules.
+ * @memberof vschema
+ * @classdesc Represents a MirrorRules.
+ * @implements IMirrorRules
+ * @constructor
+ * @param {vschema.IMirrorRules=} [properties] Properties to set
+ */
+ function MirrorRules(properties) {
+ this.rules = [];
+ 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]];
+ }
+
+ /**
+ * MirrorRules rules.
+ * @member {Array.} rules
+ * @memberof vschema.MirrorRules
+ * @instance
+ */
+ MirrorRules.prototype.rules = $util.emptyArray;
+
+ /**
+ * Creates a new MirrorRules instance using the specified properties.
+ * @function create
+ * @memberof vschema.MirrorRules
+ * @static
+ * @param {vschema.IMirrorRules=} [properties] Properties to set
+ * @returns {vschema.MirrorRules} MirrorRules instance
+ */
+ MirrorRules.create = function create(properties) {
+ return new MirrorRules(properties);
+ };
+
+ /**
+ * Encodes the specified MirrorRules message. Does not implicitly {@link vschema.MirrorRules.verify|verify} messages.
+ * @function encode
+ * @memberof vschema.MirrorRules
+ * @static
+ * @param {vschema.IMirrorRules} message MirrorRules message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ MirrorRules.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.rules != null && message.rules.length)
+ for (let i = 0; i < message.rules.length; ++i)
+ $root.vschema.MirrorRule.encode(message.rules[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified MirrorRules message, length delimited. Does not implicitly {@link vschema.MirrorRules.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof vschema.MirrorRules
+ * @static
+ * @param {vschema.IMirrorRules} message MirrorRules message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ MirrorRules.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a MirrorRules message from the specified reader or buffer.
+ * @function decode
+ * @memberof vschema.MirrorRules
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {vschema.MirrorRules} MirrorRules
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ MirrorRules.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.vschema.MirrorRules();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ if (!(message.rules && message.rules.length))
+ message.rules = [];
+ message.rules.push($root.vschema.MirrorRule.decode(reader, reader.uint32()));
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a MirrorRules message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof vschema.MirrorRules
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {vschema.MirrorRules} MirrorRules
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ MirrorRules.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a MirrorRules message.
+ * @function verify
+ * @memberof vschema.MirrorRules
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ MirrorRules.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.rules != null && message.hasOwnProperty("rules")) {
+ if (!Array.isArray(message.rules))
+ return "rules: array expected";
+ for (let i = 0; i < message.rules.length; ++i) {
+ let error = $root.vschema.MirrorRule.verify(message.rules[i]);
+ if (error)
+ return "rules." + error;
+ }
+ }
+ return null;
+ };
+
+ /**
+ * Creates a MirrorRules message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof vschema.MirrorRules
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {vschema.MirrorRules} MirrorRules
+ */
+ MirrorRules.fromObject = function fromObject(object) {
+ if (object instanceof $root.vschema.MirrorRules)
+ return object;
+ let message = new $root.vschema.MirrorRules();
+ if (object.rules) {
+ if (!Array.isArray(object.rules))
+ throw TypeError(".vschema.MirrorRules.rules: array expected");
+ message.rules = [];
+ for (let i = 0; i < object.rules.length; ++i) {
+ if (typeof object.rules[i] !== "object")
+ throw TypeError(".vschema.MirrorRules.rules: object expected");
+ message.rules[i] = $root.vschema.MirrorRule.fromObject(object.rules[i]);
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a MirrorRules message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof vschema.MirrorRules
+ * @static
+ * @param {vschema.MirrorRules} message MirrorRules
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ MirrorRules.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.arrays || options.defaults)
+ object.rules = [];
+ if (message.rules && message.rules.length) {
+ object.rules = [];
+ for (let j = 0; j < message.rules.length; ++j)
+ object.rules[j] = $root.vschema.MirrorRule.toObject(message.rules[j], options);
+ }
+ return object;
+ };
+
+ /**
+ * Converts this MirrorRules to JSON.
+ * @function toJSON
+ * @memberof vschema.MirrorRules
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ MirrorRules.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for MirrorRules
+ * @function getTypeUrl
+ * @memberof vschema.MirrorRules
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ MirrorRules.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/vschema.MirrorRules";
+ };
+
+ return MirrorRules;
+ })();
+
+ vschema.MirrorRule = (function() {
+
+ /**
+ * Properties of a MirrorRule.
+ * @memberof vschema
+ * @interface IMirrorRule
+ * @property {string|null} [from_table] MirrorRule from_table
+ * @property {string|null} [to_table] MirrorRule to_table
+ * @property {number|null} [percent] MirrorRule percent
+ */
+
+ /**
+ * Constructs a new MirrorRule.
+ * @memberof vschema
+ * @classdesc Represents a MirrorRule.
+ * @implements IMirrorRule
+ * @constructor
+ * @param {vschema.IMirrorRule=} [properties] Properties to set
+ */
+ function MirrorRule(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]];
+ }
+
+ /**
+ * MirrorRule from_table.
+ * @member {string} from_table
+ * @memberof vschema.MirrorRule
+ * @instance
+ */
+ MirrorRule.prototype.from_table = "";
+
+ /**
+ * MirrorRule to_table.
+ * @member {string} to_table
+ * @memberof vschema.MirrorRule
+ * @instance
+ */
+ MirrorRule.prototype.to_table = "";
+
+ /**
+ * MirrorRule percent.
+ * @member {number} percent
+ * @memberof vschema.MirrorRule
+ * @instance
+ */
+ MirrorRule.prototype.percent = 0;
+
+ /**
+ * Creates a new MirrorRule instance using the specified properties.
+ * @function create
+ * @memberof vschema.MirrorRule
+ * @static
+ * @param {vschema.IMirrorRule=} [properties] Properties to set
+ * @returns {vschema.MirrorRule} MirrorRule instance
+ */
+ MirrorRule.create = function create(properties) {
+ return new MirrorRule(properties);
+ };
+
+ /**
+ * Encodes the specified MirrorRule message. Does not implicitly {@link vschema.MirrorRule.verify|verify} messages.
+ * @function encode
+ * @memberof vschema.MirrorRule
+ * @static
+ * @param {vschema.IMirrorRule} message MirrorRule message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ MirrorRule.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.from_table != null && Object.hasOwnProperty.call(message, "from_table"))
+ writer.uint32(/* id 1, wireType 2 =*/10).string(message.from_table);
+ if (message.to_table != null && Object.hasOwnProperty.call(message, "to_table"))
+ writer.uint32(/* id 2, wireType 2 =*/18).string(message.to_table);
+ if (message.percent != null && Object.hasOwnProperty.call(message, "percent"))
+ writer.uint32(/* id 3, wireType 5 =*/29).float(message.percent);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified MirrorRule message, length delimited. Does not implicitly {@link vschema.MirrorRule.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof vschema.MirrorRule
+ * @static
+ * @param {vschema.IMirrorRule} message MirrorRule message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ MirrorRule.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a MirrorRule message from the specified reader or buffer.
+ * @function decode
+ * @memberof vschema.MirrorRule
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {vschema.MirrorRule} MirrorRule
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ MirrorRule.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.vschema.MirrorRule();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.from_table = reader.string();
+ break;
+ }
+ case 2: {
+ message.to_table = reader.string();
+ break;
+ }
+ case 3: {
+ message.percent = reader.float();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a MirrorRule message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof vschema.MirrorRule
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {vschema.MirrorRule} MirrorRule
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ MirrorRule.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a MirrorRule message.
+ * @function verify
+ * @memberof vschema.MirrorRule
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ MirrorRule.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.from_table != null && message.hasOwnProperty("from_table"))
+ if (!$util.isString(message.from_table))
+ return "from_table: string expected";
+ if (message.to_table != null && message.hasOwnProperty("to_table"))
+ if (!$util.isString(message.to_table))
+ return "to_table: string expected";
+ if (message.percent != null && message.hasOwnProperty("percent"))
+ if (typeof message.percent !== "number")
+ return "percent: number expected";
+ return null;
+ };
+
+ /**
+ * Creates a MirrorRule message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof vschema.MirrorRule
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {vschema.MirrorRule} MirrorRule
+ */
+ MirrorRule.fromObject = function fromObject(object) {
+ if (object instanceof $root.vschema.MirrorRule)
+ return object;
+ let message = new $root.vschema.MirrorRule();
+ if (object.from_table != null)
+ message.from_table = String(object.from_table);
+ if (object.to_table != null)
+ message.to_table = String(object.to_table);
+ if (object.percent != null)
+ message.percent = Number(object.percent);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a MirrorRule message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof vschema.MirrorRule
+ * @static
+ * @param {vschema.MirrorRule} message MirrorRule
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ MirrorRule.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.from_table = "";
+ object.to_table = "";
+ object.percent = 0;
+ }
+ if (message.from_table != null && message.hasOwnProperty("from_table"))
+ object.from_table = message.from_table;
+ if (message.to_table != null && message.hasOwnProperty("to_table"))
+ object.to_table = message.to_table;
+ if (message.percent != null && message.hasOwnProperty("percent"))
+ object.percent = options.json && !isFinite(message.percent) ? String(message.percent) : message.percent;
+ return object;
+ };
+
+ /**
+ * Converts this MirrorRule to JSON.
+ * @function toJSON
+ * @memberof vschema.MirrorRule
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ MirrorRule.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for MirrorRule
+ * @function getTypeUrl
+ * @memberof vschema.MirrorRule
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ MirrorRule.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/vschema.MirrorRule";
+ };
+
+ return MirrorRule;
+ })();
+
return vschema;
})();
@@ -181347,6 +181849,1001 @@ export const vtctldata = $root.vtctldata = (() => {
return WorkflowUpdateResponse;
})();
+ vtctldata.GetMirrorRulesRequest = (function() {
+
+ /**
+ * Properties of a GetMirrorRulesRequest.
+ * @memberof vtctldata
+ * @interface IGetMirrorRulesRequest
+ */
+
+ /**
+ * Constructs a new GetMirrorRulesRequest.
+ * @memberof vtctldata
+ * @classdesc Represents a GetMirrorRulesRequest.
+ * @implements IGetMirrorRulesRequest
+ * @constructor
+ * @param {vtctldata.IGetMirrorRulesRequest=} [properties] Properties to set
+ */
+ function GetMirrorRulesRequest(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 GetMirrorRulesRequest instance using the specified properties.
+ * @function create
+ * @memberof vtctldata.GetMirrorRulesRequest
+ * @static
+ * @param {vtctldata.IGetMirrorRulesRequest=} [properties] Properties to set
+ * @returns {vtctldata.GetMirrorRulesRequest} GetMirrorRulesRequest instance
+ */
+ GetMirrorRulesRequest.create = function create(properties) {
+ return new GetMirrorRulesRequest(properties);
+ };
+
+ /**
+ * Encodes the specified GetMirrorRulesRequest message. Does not implicitly {@link vtctldata.GetMirrorRulesRequest.verify|verify} messages.
+ * @function encode
+ * @memberof vtctldata.GetMirrorRulesRequest
+ * @static
+ * @param {vtctldata.IGetMirrorRulesRequest} message GetMirrorRulesRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ GetMirrorRulesRequest.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified GetMirrorRulesRequest message, length delimited. Does not implicitly {@link vtctldata.GetMirrorRulesRequest.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof vtctldata.GetMirrorRulesRequest
+ * @static
+ * @param {vtctldata.IGetMirrorRulesRequest} message GetMirrorRulesRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ GetMirrorRulesRequest.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a GetMirrorRulesRequest message from the specified reader or buffer.
+ * @function decode
+ * @memberof vtctldata.GetMirrorRulesRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {vtctldata.GetMirrorRulesRequest} GetMirrorRulesRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ GetMirrorRulesRequest.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.GetMirrorRulesRequest();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a GetMirrorRulesRequest message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof vtctldata.GetMirrorRulesRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {vtctldata.GetMirrorRulesRequest} GetMirrorRulesRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ GetMirrorRulesRequest.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a GetMirrorRulesRequest message.
+ * @function verify
+ * @memberof vtctldata.GetMirrorRulesRequest
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ GetMirrorRulesRequest.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ return null;
+ };
+
+ /**
+ * Creates a GetMirrorRulesRequest message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof vtctldata.GetMirrorRulesRequest
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {vtctldata.GetMirrorRulesRequest} GetMirrorRulesRequest
+ */
+ GetMirrorRulesRequest.fromObject = function fromObject(object) {
+ if (object instanceof $root.vtctldata.GetMirrorRulesRequest)
+ return object;
+ return new $root.vtctldata.GetMirrorRulesRequest();
+ };
+
+ /**
+ * Creates a plain object from a GetMirrorRulesRequest message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof vtctldata.GetMirrorRulesRequest
+ * @static
+ * @param {vtctldata.GetMirrorRulesRequest} message GetMirrorRulesRequest
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ GetMirrorRulesRequest.toObject = function toObject() {
+ return {};
+ };
+
+ /**
+ * Converts this GetMirrorRulesRequest to JSON.
+ * @function toJSON
+ * @memberof vtctldata.GetMirrorRulesRequest
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ GetMirrorRulesRequest.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for GetMirrorRulesRequest
+ * @function getTypeUrl
+ * @memberof vtctldata.GetMirrorRulesRequest
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ GetMirrorRulesRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/vtctldata.GetMirrorRulesRequest";
+ };
+
+ return GetMirrorRulesRequest;
+ })();
+
+ vtctldata.GetMirrorRulesResponse = (function() {
+
+ /**
+ * Properties of a GetMirrorRulesResponse.
+ * @memberof vtctldata
+ * @interface IGetMirrorRulesResponse
+ * @property {vschema.IMirrorRules|null} [mirror_rules] GetMirrorRulesResponse mirror_rules
+ */
+
+ /**
+ * Constructs a new GetMirrorRulesResponse.
+ * @memberof vtctldata
+ * @classdesc Represents a GetMirrorRulesResponse.
+ * @implements IGetMirrorRulesResponse
+ * @constructor
+ * @param {vtctldata.IGetMirrorRulesResponse=} [properties] Properties to set
+ */
+ function GetMirrorRulesResponse(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]];
+ }
+
+ /**
+ * GetMirrorRulesResponse mirror_rules.
+ * @member {vschema.IMirrorRules|null|undefined} mirror_rules
+ * @memberof vtctldata.GetMirrorRulesResponse
+ * @instance
+ */
+ GetMirrorRulesResponse.prototype.mirror_rules = null;
+
+ /**
+ * Creates a new GetMirrorRulesResponse instance using the specified properties.
+ * @function create
+ * @memberof vtctldata.GetMirrorRulesResponse
+ * @static
+ * @param {vtctldata.IGetMirrorRulesResponse=} [properties] Properties to set
+ * @returns {vtctldata.GetMirrorRulesResponse} GetMirrorRulesResponse instance
+ */
+ GetMirrorRulesResponse.create = function create(properties) {
+ return new GetMirrorRulesResponse(properties);
+ };
+
+ /**
+ * Encodes the specified GetMirrorRulesResponse message. Does not implicitly {@link vtctldata.GetMirrorRulesResponse.verify|verify} messages.
+ * @function encode
+ * @memberof vtctldata.GetMirrorRulesResponse
+ * @static
+ * @param {vtctldata.IGetMirrorRulesResponse} message GetMirrorRulesResponse message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ GetMirrorRulesResponse.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.mirror_rules != null && Object.hasOwnProperty.call(message, "mirror_rules"))
+ $root.vschema.MirrorRules.encode(message.mirror_rules, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified GetMirrorRulesResponse message, length delimited. Does not implicitly {@link vtctldata.GetMirrorRulesResponse.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof vtctldata.GetMirrorRulesResponse
+ * @static
+ * @param {vtctldata.IGetMirrorRulesResponse} message GetMirrorRulesResponse message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ GetMirrorRulesResponse.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a GetMirrorRulesResponse message from the specified reader or buffer.
+ * @function decode
+ * @memberof vtctldata.GetMirrorRulesResponse
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {vtctldata.GetMirrorRulesResponse} GetMirrorRulesResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ GetMirrorRulesResponse.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.GetMirrorRulesResponse();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.mirror_rules = $root.vschema.MirrorRules.decode(reader, reader.uint32());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a GetMirrorRulesResponse message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof vtctldata.GetMirrorRulesResponse
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {vtctldata.GetMirrorRulesResponse} GetMirrorRulesResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ GetMirrorRulesResponse.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a GetMirrorRulesResponse message.
+ * @function verify
+ * @memberof vtctldata.GetMirrorRulesResponse
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ GetMirrorRulesResponse.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.mirror_rules != null && message.hasOwnProperty("mirror_rules")) {
+ let error = $root.vschema.MirrorRules.verify(message.mirror_rules);
+ if (error)
+ return "mirror_rules." + error;
+ }
+ return null;
+ };
+
+ /**
+ * Creates a GetMirrorRulesResponse message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof vtctldata.GetMirrorRulesResponse
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {vtctldata.GetMirrorRulesResponse} GetMirrorRulesResponse
+ */
+ GetMirrorRulesResponse.fromObject = function fromObject(object) {
+ if (object instanceof $root.vtctldata.GetMirrorRulesResponse)
+ return object;
+ let message = new $root.vtctldata.GetMirrorRulesResponse();
+ if (object.mirror_rules != null) {
+ if (typeof object.mirror_rules !== "object")
+ throw TypeError(".vtctldata.GetMirrorRulesResponse.mirror_rules: object expected");
+ message.mirror_rules = $root.vschema.MirrorRules.fromObject(object.mirror_rules);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a GetMirrorRulesResponse message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof vtctldata.GetMirrorRulesResponse
+ * @static
+ * @param {vtctldata.GetMirrorRulesResponse} message GetMirrorRulesResponse
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ GetMirrorRulesResponse.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults)
+ object.mirror_rules = null;
+ if (message.mirror_rules != null && message.hasOwnProperty("mirror_rules"))
+ object.mirror_rules = $root.vschema.MirrorRules.toObject(message.mirror_rules, options);
+ return object;
+ };
+
+ /**
+ * Converts this GetMirrorRulesResponse to JSON.
+ * @function toJSON
+ * @memberof vtctldata.GetMirrorRulesResponse
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ GetMirrorRulesResponse.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for GetMirrorRulesResponse
+ * @function getTypeUrl
+ * @memberof vtctldata.GetMirrorRulesResponse
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ GetMirrorRulesResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/vtctldata.GetMirrorRulesResponse";
+ };
+
+ return GetMirrorRulesResponse;
+ })();
+
+ vtctldata.WorkflowMirrorTrafficRequest = (function() {
+
+ /**
+ * Properties of a WorkflowMirrorTrafficRequest.
+ * @memberof vtctldata
+ * @interface IWorkflowMirrorTrafficRequest
+ * @property {string|null} [keyspace] WorkflowMirrorTrafficRequest keyspace
+ * @property {string|null} [workflow] WorkflowMirrorTrafficRequest workflow
+ * @property {Array.|null} [tablet_types] WorkflowMirrorTrafficRequest tablet_types
+ * @property {number|null} [percent] WorkflowMirrorTrafficRequest percent
+ */
+
+ /**
+ * Constructs a new WorkflowMirrorTrafficRequest.
+ * @memberof vtctldata
+ * @classdesc Represents a WorkflowMirrorTrafficRequest.
+ * @implements IWorkflowMirrorTrafficRequest
+ * @constructor
+ * @param {vtctldata.IWorkflowMirrorTrafficRequest=} [properties] Properties to set
+ */
+ function WorkflowMirrorTrafficRequest(properties) {
+ this.tablet_types = [];
+ 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]];
+ }
+
+ /**
+ * WorkflowMirrorTrafficRequest keyspace.
+ * @member {string} keyspace
+ * @memberof vtctldata.WorkflowMirrorTrafficRequest
+ * @instance
+ */
+ WorkflowMirrorTrafficRequest.prototype.keyspace = "";
+
+ /**
+ * WorkflowMirrorTrafficRequest workflow.
+ * @member {string} workflow
+ * @memberof vtctldata.WorkflowMirrorTrafficRequest
+ * @instance
+ */
+ WorkflowMirrorTrafficRequest.prototype.workflow = "";
+
+ /**
+ * WorkflowMirrorTrafficRequest tablet_types.
+ * @member {Array.} tablet_types
+ * @memberof vtctldata.WorkflowMirrorTrafficRequest
+ * @instance
+ */
+ WorkflowMirrorTrafficRequest.prototype.tablet_types = $util.emptyArray;
+
+ /**
+ * WorkflowMirrorTrafficRequest percent.
+ * @member {number} percent
+ * @memberof vtctldata.WorkflowMirrorTrafficRequest
+ * @instance
+ */
+ WorkflowMirrorTrafficRequest.prototype.percent = 0;
+
+ /**
+ * Creates a new WorkflowMirrorTrafficRequest instance using the specified properties.
+ * @function create
+ * @memberof vtctldata.WorkflowMirrorTrafficRequest
+ * @static
+ * @param {vtctldata.IWorkflowMirrorTrafficRequest=} [properties] Properties to set
+ * @returns {vtctldata.WorkflowMirrorTrafficRequest} WorkflowMirrorTrafficRequest instance
+ */
+ WorkflowMirrorTrafficRequest.create = function create(properties) {
+ return new WorkflowMirrorTrafficRequest(properties);
+ };
+
+ /**
+ * Encodes the specified WorkflowMirrorTrafficRequest message. Does not implicitly {@link vtctldata.WorkflowMirrorTrafficRequest.verify|verify} messages.
+ * @function encode
+ * @memberof vtctldata.WorkflowMirrorTrafficRequest
+ * @static
+ * @param {vtctldata.IWorkflowMirrorTrafficRequest} message WorkflowMirrorTrafficRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ WorkflowMirrorTrafficRequest.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.keyspace != null && Object.hasOwnProperty.call(message, "keyspace"))
+ writer.uint32(/* id 1, wireType 2 =*/10).string(message.keyspace);
+ if (message.workflow != null && Object.hasOwnProperty.call(message, "workflow"))
+ writer.uint32(/* id 2, wireType 2 =*/18).string(message.workflow);
+ if (message.tablet_types != null && message.tablet_types.length) {
+ writer.uint32(/* id 3, wireType 2 =*/26).fork();
+ for (let i = 0; i < message.tablet_types.length; ++i)
+ writer.int32(message.tablet_types[i]);
+ writer.ldelim();
+ }
+ if (message.percent != null && Object.hasOwnProperty.call(message, "percent"))
+ writer.uint32(/* id 4, wireType 5 =*/37).float(message.percent);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified WorkflowMirrorTrafficRequest message, length delimited. Does not implicitly {@link vtctldata.WorkflowMirrorTrafficRequest.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof vtctldata.WorkflowMirrorTrafficRequest
+ * @static
+ * @param {vtctldata.IWorkflowMirrorTrafficRequest} message WorkflowMirrorTrafficRequest message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ WorkflowMirrorTrafficRequest.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a WorkflowMirrorTrafficRequest message from the specified reader or buffer.
+ * @function decode
+ * @memberof vtctldata.WorkflowMirrorTrafficRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {vtctldata.WorkflowMirrorTrafficRequest} WorkflowMirrorTrafficRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ WorkflowMirrorTrafficRequest.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.WorkflowMirrorTrafficRequest();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.keyspace = reader.string();
+ break;
+ }
+ case 2: {
+ message.workflow = reader.string();
+ break;
+ }
+ case 3: {
+ if (!(message.tablet_types && message.tablet_types.length))
+ message.tablet_types = [];
+ if ((tag & 7) === 2) {
+ let end2 = reader.uint32() + reader.pos;
+ while (reader.pos < end2)
+ message.tablet_types.push(reader.int32());
+ } else
+ message.tablet_types.push(reader.int32());
+ break;
+ }
+ case 4: {
+ message.percent = reader.float();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a WorkflowMirrorTrafficRequest message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof vtctldata.WorkflowMirrorTrafficRequest
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {vtctldata.WorkflowMirrorTrafficRequest} WorkflowMirrorTrafficRequest
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ WorkflowMirrorTrafficRequest.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a WorkflowMirrorTrafficRequest message.
+ * @function verify
+ * @memberof vtctldata.WorkflowMirrorTrafficRequest
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ WorkflowMirrorTrafficRequest.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.keyspace != null && message.hasOwnProperty("keyspace"))
+ if (!$util.isString(message.keyspace))
+ return "keyspace: string expected";
+ if (message.workflow != null && message.hasOwnProperty("workflow"))
+ if (!$util.isString(message.workflow))
+ return "workflow: string expected";
+ if (message.tablet_types != null && message.hasOwnProperty("tablet_types")) {
+ if (!Array.isArray(message.tablet_types))
+ return "tablet_types: array expected";
+ for (let i = 0; i < message.tablet_types.length; ++i)
+ switch (message.tablet_types[i]) {
+ default:
+ return "tablet_types: enum value[] expected";
+ case 0:
+ case 1:
+ case 1:
+ case 2:
+ case 3:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ case 8:
+ break;
+ }
+ }
+ if (message.percent != null && message.hasOwnProperty("percent"))
+ if (typeof message.percent !== "number")
+ return "percent: number expected";
+ return null;
+ };
+
+ /**
+ * Creates a WorkflowMirrorTrafficRequest message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof vtctldata.WorkflowMirrorTrafficRequest
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {vtctldata.WorkflowMirrorTrafficRequest} WorkflowMirrorTrafficRequest
+ */
+ WorkflowMirrorTrafficRequest.fromObject = function fromObject(object) {
+ if (object instanceof $root.vtctldata.WorkflowMirrorTrafficRequest)
+ return object;
+ let message = new $root.vtctldata.WorkflowMirrorTrafficRequest();
+ if (object.keyspace != null)
+ message.keyspace = String(object.keyspace);
+ if (object.workflow != null)
+ message.workflow = String(object.workflow);
+ if (object.tablet_types) {
+ if (!Array.isArray(object.tablet_types))
+ throw TypeError(".vtctldata.WorkflowMirrorTrafficRequest.tablet_types: array expected");
+ message.tablet_types = [];
+ for (let i = 0; i < object.tablet_types.length; ++i)
+ switch (object.tablet_types[i]) {
+ default:
+ if (typeof object.tablet_types[i] === "number") {
+ message.tablet_types[i] = object.tablet_types[i];
+ break;
+ }
+ case "UNKNOWN":
+ case 0:
+ message.tablet_types[i] = 0;
+ break;
+ case "PRIMARY":
+ case 1:
+ message.tablet_types[i] = 1;
+ break;
+ case "MASTER":
+ case 1:
+ message.tablet_types[i] = 1;
+ break;
+ case "REPLICA":
+ case 2:
+ message.tablet_types[i] = 2;
+ break;
+ case "RDONLY":
+ case 3:
+ message.tablet_types[i] = 3;
+ break;
+ case "BATCH":
+ case 3:
+ message.tablet_types[i] = 3;
+ break;
+ case "SPARE":
+ case 4:
+ message.tablet_types[i] = 4;
+ break;
+ case "EXPERIMENTAL":
+ case 5:
+ message.tablet_types[i] = 5;
+ break;
+ case "BACKUP":
+ case 6:
+ message.tablet_types[i] = 6;
+ break;
+ case "RESTORE":
+ case 7:
+ message.tablet_types[i] = 7;
+ break;
+ case "DRAINED":
+ case 8:
+ message.tablet_types[i] = 8;
+ break;
+ }
+ }
+ if (object.percent != null)
+ message.percent = Number(object.percent);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a WorkflowMirrorTrafficRequest message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof vtctldata.WorkflowMirrorTrafficRequest
+ * @static
+ * @param {vtctldata.WorkflowMirrorTrafficRequest} message WorkflowMirrorTrafficRequest
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ WorkflowMirrorTrafficRequest.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.arrays || options.defaults)
+ object.tablet_types = [];
+ if (options.defaults) {
+ object.keyspace = "";
+ object.workflow = "";
+ object.percent = 0;
+ }
+ if (message.keyspace != null && message.hasOwnProperty("keyspace"))
+ object.keyspace = message.keyspace;
+ if (message.workflow != null && message.hasOwnProperty("workflow"))
+ object.workflow = message.workflow;
+ if (message.tablet_types && message.tablet_types.length) {
+ object.tablet_types = [];
+ for (let j = 0; j < message.tablet_types.length; ++j)
+ object.tablet_types[j] = options.enums === String ? $root.topodata.TabletType[message.tablet_types[j]] === undefined ? message.tablet_types[j] : $root.topodata.TabletType[message.tablet_types[j]] : message.tablet_types[j];
+ }
+ if (message.percent != null && message.hasOwnProperty("percent"))
+ object.percent = options.json && !isFinite(message.percent) ? String(message.percent) : message.percent;
+ return object;
+ };
+
+ /**
+ * Converts this WorkflowMirrorTrafficRequest to JSON.
+ * @function toJSON
+ * @memberof vtctldata.WorkflowMirrorTrafficRequest
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ WorkflowMirrorTrafficRequest.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for WorkflowMirrorTrafficRequest
+ * @function getTypeUrl
+ * @memberof vtctldata.WorkflowMirrorTrafficRequest
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ WorkflowMirrorTrafficRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/vtctldata.WorkflowMirrorTrafficRequest";
+ };
+
+ return WorkflowMirrorTrafficRequest;
+ })();
+
+ vtctldata.WorkflowMirrorTrafficResponse = (function() {
+
+ /**
+ * Properties of a WorkflowMirrorTrafficResponse.
+ * @memberof vtctldata
+ * @interface IWorkflowMirrorTrafficResponse
+ * @property {string|null} [summary] WorkflowMirrorTrafficResponse summary
+ * @property {string|null} [start_state] WorkflowMirrorTrafficResponse start_state
+ * @property {string|null} [current_state] WorkflowMirrorTrafficResponse current_state
+ */
+
+ /**
+ * Constructs a new WorkflowMirrorTrafficResponse.
+ * @memberof vtctldata
+ * @classdesc Represents a WorkflowMirrorTrafficResponse.
+ * @implements IWorkflowMirrorTrafficResponse
+ * @constructor
+ * @param {vtctldata.IWorkflowMirrorTrafficResponse=} [properties] Properties to set
+ */
+ function WorkflowMirrorTrafficResponse(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]];
+ }
+
+ /**
+ * WorkflowMirrorTrafficResponse summary.
+ * @member {string} summary
+ * @memberof vtctldata.WorkflowMirrorTrafficResponse
+ * @instance
+ */
+ WorkflowMirrorTrafficResponse.prototype.summary = "";
+
+ /**
+ * WorkflowMirrorTrafficResponse start_state.
+ * @member {string} start_state
+ * @memberof vtctldata.WorkflowMirrorTrafficResponse
+ * @instance
+ */
+ WorkflowMirrorTrafficResponse.prototype.start_state = "";
+
+ /**
+ * WorkflowMirrorTrafficResponse current_state.
+ * @member {string} current_state
+ * @memberof vtctldata.WorkflowMirrorTrafficResponse
+ * @instance
+ */
+ WorkflowMirrorTrafficResponse.prototype.current_state = "";
+
+ /**
+ * Creates a new WorkflowMirrorTrafficResponse instance using the specified properties.
+ * @function create
+ * @memberof vtctldata.WorkflowMirrorTrafficResponse
+ * @static
+ * @param {vtctldata.IWorkflowMirrorTrafficResponse=} [properties] Properties to set
+ * @returns {vtctldata.WorkflowMirrorTrafficResponse} WorkflowMirrorTrafficResponse instance
+ */
+ WorkflowMirrorTrafficResponse.create = function create(properties) {
+ return new WorkflowMirrorTrafficResponse(properties);
+ };
+
+ /**
+ * Encodes the specified WorkflowMirrorTrafficResponse message. Does not implicitly {@link vtctldata.WorkflowMirrorTrafficResponse.verify|verify} messages.
+ * @function encode
+ * @memberof vtctldata.WorkflowMirrorTrafficResponse
+ * @static
+ * @param {vtctldata.IWorkflowMirrorTrafficResponse} message WorkflowMirrorTrafficResponse message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ WorkflowMirrorTrafficResponse.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.summary != null && Object.hasOwnProperty.call(message, "summary"))
+ writer.uint32(/* id 1, wireType 2 =*/10).string(message.summary);
+ if (message.start_state != null && Object.hasOwnProperty.call(message, "start_state"))
+ writer.uint32(/* id 2, wireType 2 =*/18).string(message.start_state);
+ if (message.current_state != null && Object.hasOwnProperty.call(message, "current_state"))
+ writer.uint32(/* id 3, wireType 2 =*/26).string(message.current_state);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified WorkflowMirrorTrafficResponse message, length delimited. Does not implicitly {@link vtctldata.WorkflowMirrorTrafficResponse.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof vtctldata.WorkflowMirrorTrafficResponse
+ * @static
+ * @param {vtctldata.IWorkflowMirrorTrafficResponse} message WorkflowMirrorTrafficResponse message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ WorkflowMirrorTrafficResponse.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a WorkflowMirrorTrafficResponse message from the specified reader or buffer.
+ * @function decode
+ * @memberof vtctldata.WorkflowMirrorTrafficResponse
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {vtctldata.WorkflowMirrorTrafficResponse} WorkflowMirrorTrafficResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ WorkflowMirrorTrafficResponse.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.WorkflowMirrorTrafficResponse();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.summary = reader.string();
+ break;
+ }
+ case 2: {
+ message.start_state = reader.string();
+ break;
+ }
+ case 3: {
+ message.current_state = reader.string();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a WorkflowMirrorTrafficResponse message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof vtctldata.WorkflowMirrorTrafficResponse
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {vtctldata.WorkflowMirrorTrafficResponse} WorkflowMirrorTrafficResponse
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ WorkflowMirrorTrafficResponse.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a WorkflowMirrorTrafficResponse message.
+ * @function verify
+ * @memberof vtctldata.WorkflowMirrorTrafficResponse
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ WorkflowMirrorTrafficResponse.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.summary != null && message.hasOwnProperty("summary"))
+ if (!$util.isString(message.summary))
+ return "summary: string expected";
+ if (message.start_state != null && message.hasOwnProperty("start_state"))
+ if (!$util.isString(message.start_state))
+ return "start_state: string expected";
+ if (message.current_state != null && message.hasOwnProperty("current_state"))
+ if (!$util.isString(message.current_state))
+ return "current_state: string expected";
+ return null;
+ };
+
+ /**
+ * Creates a WorkflowMirrorTrafficResponse message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof vtctldata.WorkflowMirrorTrafficResponse
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {vtctldata.WorkflowMirrorTrafficResponse} WorkflowMirrorTrafficResponse
+ */
+ WorkflowMirrorTrafficResponse.fromObject = function fromObject(object) {
+ if (object instanceof $root.vtctldata.WorkflowMirrorTrafficResponse)
+ return object;
+ let message = new $root.vtctldata.WorkflowMirrorTrafficResponse();
+ if (object.summary != null)
+ message.summary = String(object.summary);
+ if (object.start_state != null)
+ message.start_state = String(object.start_state);
+ if (object.current_state != null)
+ message.current_state = String(object.current_state);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a WorkflowMirrorTrafficResponse message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof vtctldata.WorkflowMirrorTrafficResponse
+ * @static
+ * @param {vtctldata.WorkflowMirrorTrafficResponse} message WorkflowMirrorTrafficResponse
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ WorkflowMirrorTrafficResponse.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.summary = "";
+ object.start_state = "";
+ object.current_state = "";
+ }
+ if (message.summary != null && message.hasOwnProperty("summary"))
+ object.summary = message.summary;
+ if (message.start_state != null && message.hasOwnProperty("start_state"))
+ object.start_state = message.start_state;
+ if (message.current_state != null && message.hasOwnProperty("current_state"))
+ object.current_state = message.current_state;
+ return object;
+ };
+
+ /**
+ * Converts this WorkflowMirrorTrafficResponse to JSON.
+ * @function toJSON
+ * @memberof vtctldata.WorkflowMirrorTrafficResponse
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ WorkflowMirrorTrafficResponse.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for WorkflowMirrorTrafficResponse
+ * @function getTypeUrl
+ * @memberof vtctldata.WorkflowMirrorTrafficResponse
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ WorkflowMirrorTrafficResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/vtctldata.WorkflowMirrorTrafficResponse";
+ };
+
+ return WorkflowMirrorTrafficResponse;
+ })();
+
return vtctldata;
})();