Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clear existing keyspace schema in vtgate before [re]loading it #9437

Merged

Conversation

mattlord
Copy link
Contributor

@mattlord mattlord commented Dec 22, 2021

Description

Note: this is only relevant when explicitly enabling the experimental schema tracking feature

A vtgate listens for schema change signals from the primary tablet in a shard. When a vtgate receives the initial signal from a new primary tablet it then initializes/loads the keyspace schema. When the primary tablet was restarted, however, we did not clear out any previous schema for that keyspace so we would end up with duplicated column names that grew over time.

We also had a very confusing log message which said it loaded N tables in a keyspace when in reality the value was a count of the columns across all the tables.

You can see examples and test cases for these things here and here.

The manual test here now passes and a new e2e test was added to cover this case.

The new e2e test fails on main as expected. Click here for details.
$ vtgate -version
Version: 13.0.0-SNAPSHOT (Git revision b694744925 branch 'main') built on Thu Dec 23 01:01:05 UTC 2021 by vitess@796ed119b7c6 using go1.17 linux/amd64

$ go test -timeout 30m -v -failfast vitess.io/vitess/go/test/endtoend/vtgate/schematracker/restarttablet
ERROR: logging before flag.Parse: E1223 02:52:09.536259    7673 syslogger.go:149] can't connect to syslog
=== RUN   TestVSchemaTrackerInit
--- PASS: TestVSchemaTrackerInit (0.01s)
=== RUN   TestVSchemaTrackerKeyspaceReInit
    schema_restart_test.go:152:
        	Error Trace:	schema_restart_test.go:152
        	Error:      	Not equal:
        	            	expected: map[string]interface {}{"keyspaces":map[string]interface {}{"ks":map[string]interface {}{"tables":map[string]interface {}{"dual":map[string]interface {}{"name":"dual", "type":"reference"}, "main":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}}, "name":"main"}, "test_table":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}}, "name":"test_table"}, "vt_user":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}}, "name":"vt_user"}}}}, "routing_rules":map[string]interface {}{}}
        	            	actual  : map[string]interface {}{"keyspaces":map[string]interface {}{"ks":map[string]interface {}{"tables":map[string]interface {}{"dual":map[string]interface {}{"name":"dual", "type":"reference"}, "main":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}}, "name":"main"}, "test_table":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}}, "name":"test_table"}, "vt_user":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}}, "name":"vt_user"}}}}, "routing_rules":map[string]interface {}{}}

        	            	Diff:
        	            	--- Expected
        	            	+++ Actual
        	            	@@ -10,3 +10,11 @@
        	            	      (string) (len=25) "column_list_authoritative": (bool) true,
        	            	-     (string) (len=7) "columns": ([]interface {}) (len=2) {
        	            	+     (string) (len=7) "columns": ([]interface {}) (len=4) {
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	       (map[string]interface {}) (len=2) {
        	            	@@ -24,3 +32,11 @@
        	            	      (string) (len=25) "column_list_authoritative": (bool) true,
        	            	-     (string) (len=7) "columns": ([]interface {}) (len=2) {
        	            	+     (string) (len=7) "columns": ([]interface {}) (len=4) {
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	       (map[string]interface {}) (len=2) {
        	            	@@ -38,3 +54,11 @@
        	            	      (string) (len=25) "column_list_authoritative": (bool) true,
        	            	-     (string) (len=7) "columns": ([]interface {}) (len=2) {
        	            	+     (string) (len=7) "columns": ([]interface {}) (len=4) {
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=4) "name",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	       (map[string]interface {}) (len=2) {
        	Test:       	TestVSchemaTrackerKeyspaceReInit
    schema_restart_test.go:152:
        	Error Trace:	schema_restart_test.go:152
        	Error:      	Not equal:
        	            	expected: map[string]interface {}{"keyspaces":map[string]interface {}{"ks":map[string]interface {}{"tables":map[string]interface {}{"dual":map[string]interface {}{"name":"dual", "type":"reference"}, "main":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}}, "name":"main"}, "test_table":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}}, "name":"test_table"}, "vt_user":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}}, "name":"vt_user"}}}}, "routing_rules":map[string]interface {}{}}
        	            	actual  : map[string]interface {}{"keyspaces":map[string]interface {}{"ks":map[string]interface {}{"tables":map[string]interface {}{"dual":map[string]interface {}{"name":"dual", "type":"reference"}, "main":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}}, "name":"main"}, "test_table":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}}, "name":"test_table"}, "vt_user":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}}, "name":"vt_user"}}}}, "routing_rules":map[string]interface {}{}}

        	            	Diff:
        	            	--- Expected
        	            	+++ Actual
        	            	@@ -10,3 +10,19 @@
        	            	      (string) (len=25) "column_list_authoritative": (bool) true,
        	            	-     (string) (len=7) "columns": ([]interface {}) (len=2) {
        	            	+     (string) (len=7) "columns": ([]interface {}) (len=6) {
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	       (map[string]interface {}) (len=2) {
        	            	@@ -24,3 +40,19 @@
        	            	      (string) (len=25) "column_list_authoritative": (bool) true,
        	            	-     (string) (len=7) "columns": ([]interface {}) (len=2) {
        	            	+     (string) (len=7) "columns": ([]interface {}) (len=6) {
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	       (map[string]interface {}) (len=2) {
        	            	@@ -38,3 +70,19 @@
        	            	      (string) (len=25) "column_list_authoritative": (bool) true,
        	            	-     (string) (len=7) "columns": ([]interface {}) (len=2) {
        	            	+     (string) (len=7) "columns": ([]interface {}) (len=6) {
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=4) "name",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=4) "name",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	       (map[string]interface {}) (len=2) {
        	Test:       	TestVSchemaTrackerKeyspaceReInit
    schema_restart_test.go:152:
        	Error Trace:	schema_restart_test.go:152
        	Error:      	Not equal:
        	            	expected: map[string]interface {}{"keyspaces":map[string]interface {}{"ks":map[string]interface {}{"tables":map[string]interface {}{"dual":map[string]interface {}{"name":"dual", "type":"reference"}, "main":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}}, "name":"main"}, "test_table":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}}, "name":"test_table"}, "vt_user":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}}, "name":"vt_user"}}}}, "routing_rules":map[string]interface {}{}}
        	            	actual  : map[string]interface {}{"keyspaces":map[string]interface {}{"ks":map[string]interface {}{"tables":map[string]interface {}{"dual":map[string]interface {}{"name":"dual", "type":"reference"}, "main":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}}, "name":"main"}, "test_table":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}}, "name":"test_table"}, "vt_user":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}}, "name":"vt_user"}}}}, "routing_rules":map[string]interface {}{}}

        	            	Diff:
        	            	--- Expected
        	            	+++ Actual
        	            	@@ -10,3 +10,27 @@
        	            	      (string) (len=25) "column_list_authoritative": (bool) true,
        	            	-     (string) (len=7) "columns": ([]interface {}) (len=2) {
        	            	+     (string) (len=7) "columns": ([]interface {}) (len=8) {
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	       (map[string]interface {}) (len=2) {
        	            	@@ -24,3 +48,27 @@
        	            	      (string) (len=25) "column_list_authoritative": (bool) true,
        	            	-     (string) (len=7) "columns": ([]interface {}) (len=2) {
        	            	+     (string) (len=7) "columns": ([]interface {}) (len=8) {
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	       (map[string]interface {}) (len=2) {
        	            	@@ -38,3 +86,27 @@
        	            	      (string) (len=25) "column_list_authoritative": (bool) true,
        	            	-     (string) (len=7) "columns": ([]interface {}) (len=2) {
        	            	+     (string) (len=7) "columns": ([]interface {}) (len=8) {
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=4) "name",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=4) "name",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=4) "name",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	       (map[string]interface {}) (len=2) {
        	Test:       	TestVSchemaTrackerKeyspaceReInit
    schema_restart_test.go:152:
        	Error Trace:	schema_restart_test.go:152
        	Error:      	Not equal:
        	            	expected: map[string]interface {}{"keyspaces":map[string]interface {}{"ks":map[string]interface {}{"tables":map[string]interface {}{"dual":map[string]interface {}{"name":"dual", "type":"reference"}, "main":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}}, "name":"main"}, "test_table":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}}, "name":"test_table"}, "vt_user":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}}, "name":"vt_user"}}}}, "routing_rules":map[string]interface {}{}}
        	            	actual  : map[string]interface {}{"keyspaces":map[string]interface {}{"ks":map[string]interface {}{"tables":map[string]interface {}{"dual":map[string]interface {}{"name":"dual", "type":"reference"}, "main":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}}, "name":"main"}, "test_table":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}}, "name":"test_table"}, "vt_user":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}}, "name":"vt_user"}}}}, "routing_rules":map[string]interface {}{}}

        	            	Diff:
        	            	--- Expected
        	            	+++ Actual
        	            	@@ -10,3 +10,35 @@
        	            	      (string) (len=25) "column_list_authoritative": (bool) true,
        	            	-     (string) (len=7) "columns": ([]interface {}) (len=2) {
        	            	+     (string) (len=7) "columns": ([]interface {}) (len=10) {
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	       (map[string]interface {}) (len=2) {
        	            	@@ -24,3 +56,35 @@
        	            	      (string) (len=25) "column_list_authoritative": (bool) true,
        	            	-     (string) (len=7) "columns": ([]interface {}) (len=2) {
        	            	+     (string) (len=7) "columns": ([]interface {}) (len=10) {
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	       (map[string]interface {}) (len=2) {
        	            	@@ -38,3 +102,35 @@
        	            	      (string) (len=25) "column_list_authoritative": (bool) true,
        	            	-     (string) (len=7) "columns": ([]interface {}) (len=2) {
        	            	+     (string) (len=7) "columns": ([]interface {}) (len=10) {
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=4) "name",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=4) "name",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=4) "name",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=4) "name",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	       (map[string]interface {}) (len=2) {
        	Test:       	TestVSchemaTrackerKeyspaceReInit
    schema_restart_test.go:152:
        	Error Trace:	schema_restart_test.go:152
        	Error:      	Not equal:
        	            	expected: map[string]interface {}{"keyspaces":map[string]interface {}{"ks":map[string]interface {}{"tables":map[string]interface {}{"dual":map[string]interface {}{"name":"dual", "type":"reference"}, "main":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}}, "name":"main"}, "test_table":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}}, "name":"test_table"}, "vt_user":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}}, "name":"vt_user"}}}}, "routing_rules":map[string]interface {}{}}
        	            	actual  : map[string]interface {}{"keyspaces":map[string]interface {}{"ks":map[string]interface {}{"tables":map[string]interface {}{"dual":map[string]interface {}{"name":"dual", "type":"reference"}, "main":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}}, "name":"main"}, "test_table":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"val", "type":"VARCHAR"}}, "name":"test_table"}, "vt_user":map[string]interface {}{"column_list_authoritative":true, "columns":[]interface {}{map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}, map[string]interface {}{"name":"id", "type":"INT64"}, map[string]interface {}{"name":"name", "type":"VARCHAR"}}, "name":"vt_user"}}}}, "routing_rules":map[string]interface {}{}}

        	            	Diff:
        	            	--- Expected
        	            	+++ Actual
        	            	@@ -10,3 +10,43 @@
        	            	      (string) (len=25) "column_list_authoritative": (bool) true,
        	            	-     (string) (len=7) "columns": ([]interface {}) (len=2) {
        	            	+     (string) (len=7) "columns": ([]interface {}) (len=12) {
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	       (map[string]interface {}) (len=2) {
        	            	@@ -24,3 +64,43 @@
        	            	      (string) (len=25) "column_list_authoritative": (bool) true,
        	            	-     (string) (len=7) "columns": ([]interface {}) (len=2) {
        	            	+     (string) (len=7) "columns": ([]interface {}) (len=12) {
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=3) "val",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	       (map[string]interface {}) (len=2) {
        	            	@@ -38,3 +118,43 @@
        	            	      (string) (len=25) "column_list_authoritative": (bool) true,
        	            	-     (string) (len=7) "columns": ([]interface {}) (len=2) {
        	            	+     (string) (len=7) "columns": ([]interface {}) (len=12) {
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=4) "name",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=4) "name",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=4) "name",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=4) "name",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=2) "id",
        	            	+       (string) (len=4) "type": (string) (len=5) "INT64"
        	            	+      },
        	            	+      (map[string]interface {}) (len=2) {
        	            	+       (string) (len=4) "name": (string) (len=4) "name",
        	            	+       (string) (len=4) "type": (string) (len=7) "VARCHAR"
        	            	+      },
        	            	       (map[string]interface {}) (len=2) {
        	Test:       	TestVSchemaTrackerKeyspaceReInit
--- FAIL: TestVSchemaTrackerKeyspaceReInit (61.61s)
FAIL
FAIL	vitess.io/vitess/go/test/endtoend/vtgate/schematracker/restarttablet	83.186s
FAIL

Related Issue(s)

Fixes: #9431

Checklist

  • Should this PR be backported? NO
  • Tests were added
  • Documentation is not required

@mattlord mattlord force-pushed the vtgate_schema_tracking_dups branch 3 times, most recently from 0663db4 to 4a3225d Compare December 22, 2021 22:15
@mattlord mattlord changed the title Clear keyspace schema in vtgate before re-loading it Clear any existing keyspace schema in vtgate before loading it Dec 22, 2021
@mattlord mattlord force-pushed the vtgate_schema_tracking_dups branch 4 times, most recently from 6304de5 to af7224b Compare December 23, 2021 00:31
@mattlord mattlord marked this pull request as ready for review December 23, 2021 00:32
@mattlord mattlord force-pushed the vtgate_schema_tracking_dups branch 2 times, most recently from 2f8cb15 to f4f876a Compare December 23, 2021 02:47
@mattlord mattlord changed the title Clear any existing keyspace schema in vtgate before loading it Clear existing keyspace schema in vtgate before [re-]loading it Dec 23, 2021
@mattlord mattlord changed the title Clear existing keyspace schema in vtgate before [re-]loading it Clear existing keyspace schema in vtgate before [re]loading it Dec 23, 2021
Comment on lines 79 to 81
// Enable schema tracking
clusterInstance.VtGateExtraArgs = []string{"-schema_change_signal"}
clusterInstance.VtTabletExtraArgs = []string{
"-queryserver-config-schema-change-signal",
fmt.Sprintf("-queryserver-config-schema-change-signal-interval=%d", signalInterval),
}

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this changes the existing test, would prefer a new test for the fix.

Copy link
Contributor Author

@mattlord mattlord Dec 30, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How so? The signal was getting enabled before on line 89, now it's here as it should be IMO. And the non-default interval isn't necessary, it just decreases the runtime of the tests.

Am I missing something?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The earlier test was testing that
VTGate started with schema tracking
VTTablet started with no-schema tracking
on restart of VTTablet, schema tracking was enabled.

VTGate should be able to receive the schema information and update it's vschema post VTTablet restart.

Copy link
Member

@frouioui frouioui left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Regarding the restarttablet test suite, I agree with you @mattlord, I think we can use a non-default interval as it can decrease the runtime of the tests. But, we need to keep setting the -queryserver-config-schema-change-signal flag to true after the tablets have already started, as @harshit-gangal said, so we can keep the old behavior.

I don't think that setting the flag after the tablet's first start and before its restart shouldn't impact your test (TestVSchemaTrackerKeyspaceReInit). If it does we will probably need a new TestMain.

The pull request looks great to me! thank you 👌🏻

@mattlord
Copy link
Contributor Author

mattlord commented Jan 3, 2022

Ah, I now see what you mean. I'll correct this now. Thanks, @harshit-gangal and @frouioui !

@mattlord
Copy link
Contributor Author

mattlord commented Jan 3, 2022

@harshit-gangal and @frouioui I believe that this simple change — where we set the tablet's schema change flags after cluster creation — gets us what we wanted here so that the existing test is unchanged (we start the tablet w/o schema tracking enabled, then restart it with it enabled). With that commit, the full relevant portion of the diff is now:

@@ -86,7 +90,10 @@ func TestMain(m *testing.M) {

                // restart the tablet so that the schema.Engine gets a chance to start with existing schema
                tablet := clusterInstance.Keyspaces[0].Shards[0].PrimaryTablet()
-               tablet.VttabletProcess.ExtraArgs = []string{"-queryserver-config-schema-change-signal"}
+               tablet.VttabletProcess.ExtraArgs = []string{
+                       "-queryserver-config-schema-change-signal",
+                       fmt.Sprintf("-queryserver-config-schema-change-signal-interval=%d", signalInterval),
+               }
                if err := tablet.RestartOnlyTablet(); err != nil {
                        return 1
                }

Please let me know if I missed or misunderstood something though.

Thanks again!

@mattlord mattlord force-pushed the vtgate_schema_tracking_dups branch 2 times, most recently from b52d325 to d4f60d4 Compare January 4, 2022 02:45
Signed-off-by: Matt Lord <mattalord@gmail.com>
Signed-off-by: Matt Lord <mattalord@gmail.com>
Signed-off-by: Matt Lord <mattalord@gmail.com>
This keeps the init test unchanged

Signed-off-by: Matt Lord <mattalord@gmail.com>
tablet.VttabletProcess.ExtraArgs = []string{"-queryserver-config-schema-change-signal"}
tablet.VttabletProcess.ExtraArgs = []string{
"-queryserver-config-schema-change-signal",
fmt.Sprintf("-queryserver-config-schema-change-signal-interval=%d", signalInterval),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: easier way to give this is
[]string{...., "-queryserver-config-schema-change-signal-interval", strconv.Itoa(signalInterval), .... }

@harshit-gangal harshit-gangal merged commit ad29097 into vitessio:main Jan 4, 2022
@harshit-gangal harshit-gangal deleted the vtgate_schema_tracking_dups branch January 4, 2022 07:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Vitess sequence table field confusion after sequence table primary vttablet restart with schema tracking on
3 participants