From 9004f977ecc72fa713a404c1f0708b98d3654208 Mon Sep 17 00:00:00 2001 From: GuptaManan100 Date: Mon, 28 Sep 2020 10:56:01 +0530 Subject: [PATCH 01/12] Added argument to specify keyspace name Signed-off-by: GuptaManan100 --- go/vt/vttablet/tabletserver/bench_test.go | 4 +- .../tabletserver/tabletserver_test.go | 77 ++++++++++--------- 2 files changed, 42 insertions(+), 39 deletions(-) diff --git a/go/vt/vttablet/tabletserver/bench_test.go b/go/vt/vttablet/tabletserver/bench_test.go index 43d3faea4df..8ecb0f26b00 100644 --- a/go/vt/vttablet/tabletserver/bench_test.go +++ b/go/vt/vttablet/tabletserver/bench_test.go @@ -55,7 +55,7 @@ func init() { } func BenchmarkExecuteVarBinary(b *testing.B) { - db, tsv := setupTabletServerTest(nil) + db, tsv := setupTabletServerTest(nil, "") defer db.Close() defer tsv.StopService() @@ -77,7 +77,7 @@ func BenchmarkExecuteVarBinary(b *testing.B) { } func BenchmarkExecuteExpression(b *testing.B) { - db, tsv := setupTabletServerTest(nil) + db, tsv := setupTabletServerTest(nil, "") defer db.Close() defer tsv.StopService() diff --git a/go/vt/vttablet/tabletserver/tabletserver_test.go b/go/vt/vttablet/tabletserver/tabletserver_test.go index 05900a06902..0a89604b831 100644 --- a/go/vt/vttablet/tabletserver/tabletserver_test.go +++ b/go/vt/vttablet/tabletserver/tabletserver_test.go @@ -56,7 +56,7 @@ import ( ) func TestBeginOnReplica(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() @@ -364,7 +364,7 @@ func TestTabletServerConcludeTransaction(t *testing.T) { func TestTabletServerBeginFail(t *testing.T) { config := tabletenv.NewDefaultConfig() config.TxPool.Size = 1 - db, tsv := setupTabletServerTestCustom(t, config) + db, tsv := setupTabletServerTestCustom(t, config, "") defer tsv.StopService() defer db.Close() @@ -377,7 +377,7 @@ func TestTabletServerBeginFail(t *testing.T) { } func TestTabletServerCommitTransaction(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() @@ -402,7 +402,7 @@ func TestTabletServerCommitTransaction(t *testing.T) { } func TestTabletServerCommiRollbacktFail(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() @@ -415,7 +415,7 @@ func TestTabletServerCommiRollbacktFail(t *testing.T) { } func TestTabletServerRollback(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() @@ -475,7 +475,7 @@ func TestTabletServerCommitPrepared(t *testing.T) { } func TestTabletServerReserveConnection(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() @@ -497,7 +497,7 @@ func TestTabletServerReserveConnection(t *testing.T) { } func TestTabletServerExecNonExistentConnection(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() @@ -511,7 +511,7 @@ func TestTabletServerExecNonExistentConnection(t *testing.T) { } func TestTabletServerReleaseNonExistentConnection(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() @@ -524,7 +524,7 @@ func TestTabletServerReleaseNonExistentConnection(t *testing.T) { } func TestMakeSureToCloseDbConnWhenBeginQueryFails(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() @@ -538,7 +538,7 @@ func TestMakeSureToCloseDbConnWhenBeginQueryFails(t *testing.T) { } func TestTabletServerReserveAndBeginCommit(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() @@ -607,7 +607,7 @@ func TestTabletServerRollbackPrepared(t *testing.T) { } func TestTabletServerStreamExecute(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() @@ -631,7 +631,7 @@ func TestTabletServerStreamExecute(t *testing.T) { } func TestTabletServerStreamExecuteComments(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() @@ -673,7 +673,7 @@ func TestTabletServerStreamExecuteComments(t *testing.T) { } } func TestTabletServerExecuteBatch(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() @@ -695,7 +695,7 @@ func TestTabletServerExecuteBatch(t *testing.T) { } func TestTabletServerExecuteBatchFailEmptyQueryList(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() @@ -706,7 +706,7 @@ func TestTabletServerExecuteBatchFailEmptyQueryList(t *testing.T) { } func TestTabletServerExecuteBatchFailAsTransaction(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() @@ -722,7 +722,7 @@ func TestTabletServerExecuteBatchFailAsTransaction(t *testing.T) { } func TestTabletServerExecuteBatchBeginFail(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() @@ -739,7 +739,7 @@ func TestTabletServerExecuteBatchBeginFail(t *testing.T) { } func TestTabletServerExecuteBatchCommitFail(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() @@ -760,7 +760,7 @@ func TestTabletServerExecuteBatchCommitFail(t *testing.T) { } func TestTabletServerExecuteBatchSqlExecFailInTransaction(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() @@ -795,7 +795,7 @@ func TestTabletServerExecuteBatchSqlExecFailInTransaction(t *testing.T) { } func TestTabletServerExecuteBatchCallCommitWithoutABegin(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() @@ -810,7 +810,7 @@ func TestTabletServerExecuteBatchCallCommitWithoutABegin(t *testing.T) { } func TestExecuteBatchNestedTransaction(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() @@ -860,7 +860,7 @@ func TestSerializeTransactionsSameRow(t *testing.T) { config.HotRowProtection.MaxConcurrency = 1 // Reduce the txpool to 2 because we should never consume more than two slots. config.TxPool.Size = 2 - db, tsv := setupTabletServerTestCustom(t, config) + db, tsv := setupTabletServerTestCustom(t, config, "") defer tsv.StopService() defer db.Close() @@ -965,7 +965,7 @@ func TestDMLQueryWithoutWhereClause(t *testing.T) { config.HotRowProtection.Mode = tabletenv.Enable config.HotRowProtection.MaxConcurrency = 1 config.TxPool.Size = 2 - db, tsv := setupTabletServerTestCustom(t, config) + db, tsv := setupTabletServerTestCustom(t, config, "") defer tsv.StopService() defer db.Close() @@ -1001,7 +1001,7 @@ func TestSerializeTransactionsSameRow_ExecuteBatchAsTransaction(t *testing.T) { config.HotRowProtection.MaxConcurrency = 1 // Reduce the txpool to 2 because we should never consume more than two slots. config.TxPool.Size = 2 - db, tsv := setupTabletServerTestCustom(t, config) + db, tsv := setupTabletServerTestCustom(t, config, "") defer tsv.StopService() defer db.Close() @@ -1113,7 +1113,7 @@ func TestSerializeTransactionsSameRow_ConcurrentTransactions(t *testing.T) { config.HotRowProtection.MaxConcurrency = 2 // Reduce the txpool to 2 because we should never consume more than two slots. config.TxPool.Size = 2 - db, tsv := setupTabletServerTestCustom(t, config) + db, tsv := setupTabletServerTestCustom(t, config, "") defer tsv.StopService() defer db.Close() @@ -1247,7 +1247,7 @@ func TestSerializeTransactionsSameRow_TooManyPendingRequests(t *testing.T) { config.HotRowProtection.Mode = tabletenv.Enable config.HotRowProtection.MaxQueueSize = 1 config.HotRowProtection.MaxConcurrency = 1 - db, tsv := setupTabletServerTestCustom(t, config) + db, tsv := setupTabletServerTestCustom(t, config, "") defer tsv.StopService() defer db.Close() @@ -1330,7 +1330,7 @@ func TestSerializeTransactionsSameRow_TooManyPendingRequests_ExecuteBatchAsTrans config.HotRowProtection.Mode = tabletenv.Enable config.HotRowProtection.MaxQueueSize = 1 config.HotRowProtection.MaxConcurrency = 1 - db, tsv := setupTabletServerTestCustom(t, config) + db, tsv := setupTabletServerTestCustom(t, config, "") defer tsv.StopService() defer db.Close() @@ -1416,7 +1416,7 @@ func TestSerializeTransactionsSameRow_RequestCanceled(t *testing.T) { config := tabletenv.NewDefaultConfig() config.HotRowProtection.Mode = tabletenv.Enable config.HotRowProtection.MaxConcurrency = 1 - db, tsv := setupTabletServerTestCustom(t, config) + db, tsv := setupTabletServerTestCustom(t, config, "") defer tsv.StopService() defer db.Close() @@ -1900,7 +1900,7 @@ func TestACLHUP(t *testing.T) { } func TestConfigChanges(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() @@ -1965,7 +1965,7 @@ func TestConfigChanges(t *testing.T) { } func TestReserveBeginExecute(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() target := querypb.Target{TabletType: topodatapb.TabletType_MASTER} @@ -1987,7 +1987,7 @@ func TestReserveBeginExecute(t *testing.T) { } func TestReserveExecute_WithoutTx(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() @@ -2007,7 +2007,7 @@ func TestReserveExecute_WithoutTx(t *testing.T) { } func TestReserveExecute_WithTx(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() target := querypb.Target{TabletType: topodatapb.TabletType_MASTER} @@ -2064,7 +2064,7 @@ func TestRelease(t *testing.T) { name += " reserve" } t.Run(name, func(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() db.AddQueryPattern(".*", &sqltypes.Result{}) @@ -2101,7 +2101,7 @@ func TestRelease(t *testing.T) { } func TestReserveStats(t *testing.T) { - db, tsv := setupTabletServerTest(t) + db, tsv := setupTabletServerTest(t, "") defer tsv.StopService() defer db.Close() @@ -2154,17 +2154,20 @@ func TestReserveStats(t *testing.T) { assert.NotEmpty(t, tsv.te.txPool.env.Stats().UserReservedTimesNs.Counts()["test"]) } -func setupTabletServerTest(t *testing.T) (*fakesqldb.DB, *TabletServer) { +func setupTabletServerTest(t *testing.T, keyspaceName string) (*fakesqldb.DB, *TabletServer) { config := tabletenv.NewDefaultConfig() - return setupTabletServerTestCustom(t, config) + return setupTabletServerTestCustom(t, config, keyspaceName) } -func setupTabletServerTestCustom(t *testing.T, config *tabletenv.TabletConfig) (*fakesqldb.DB, *TabletServer) { +func setupTabletServerTestCustom(t *testing.T, config *tabletenv.TabletConfig, keyspaceName string) (*fakesqldb.DB, *TabletServer) { db := setupFakeDB(t) tsv := NewTabletServer("TabletServerTest", config, memorytopo.NewServer(""), topodatapb.TabletAlias{}) require.Equal(t, StateNotConnected, tsv.sm.State()) dbcfgs := newDBConfigs(db) - target := querypb.Target{TabletType: topodatapb.TabletType_MASTER} + target := querypb.Target{ + Keyspace: keyspaceName, + TabletType: topodatapb.TabletType_MASTER, + } err := tsv.StartService(target, dbcfgs, nil /* mysqld */) require.NoError(t, err) return db, tsv From 5a71ac05d5515336ddd151fb3b0ba4de34f0172f Mon Sep 17 00:00:00 2001 From: GuptaManan100 Date: Mon, 28 Sep 2020 11:38:50 +0530 Subject: [PATCH 02/12] Replaced database name in all fields to KeyspaceName in Execute method and added a test Signed-off-by: GuptaManan100 --- go/vt/vttablet/tabletserver/tabletserver.go | 7 +++++ .../tabletserver/tabletserver_test.go | 31 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/go/vt/vttablet/tabletserver/tabletserver.go b/go/vt/vttablet/tabletserver/tabletserver.go index 6ef9abd7358..02c0d9a6077 100644 --- a/go/vt/vttablet/tabletserver/tabletserver.go +++ b/go/vt/vttablet/tabletserver/tabletserver.go @@ -643,6 +643,13 @@ func (tsv *TabletServer) Execute(ctx context.Context, target *querypb.Target, sq return err } result = result.StripMetadata(sqltypes.IncludeFieldsOrDefault(options)) + + // Change database name in mysql output to the keyspace name + for _, f := range result.Fields { + if f.Database != "" { + f.Database = tsv.sm.target.Keyspace + } + } return nil }, ) diff --git a/go/vt/vttablet/tabletserver/tabletserver_test.go b/go/vt/vttablet/tabletserver/tabletserver_test.go index 0a89604b831..d2caaa3d8c3 100644 --- a/go/vt/vttablet/tabletserver/tabletserver_test.go +++ b/go/vt/vttablet/tabletserver/tabletserver_test.go @@ -2154,6 +2154,37 @@ func TestReserveStats(t *testing.T) { assert.NotEmpty(t, tsv.te.txPool.env.Stats().UserReservedTimesNs.Counts()["test"]) } +func TestDatabaseNameReplaceByKeyspaceName(t *testing.T) { + db, tsv := setupTabletServerTest(t, "keyspaceName") + db.SetName("databaseInMysql") + defer tsv.StopService() + defer db.Close() + + executeSQL := "select * from test_table limit 1000" + executeSQLResult := &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Type: sqltypes.VarBinary, + Database: "databaseInMysql", + }, + }, + RowsAffected: 1, + Rows: [][]sqltypes.Value{ + {sqltypes.NewVarBinary("row01")}, + }, + } + r := db.AddQuery(executeSQL, executeSQLResult) + require.NotNil(t, r) + target := tsv.sm.target + transactionID, _, err := tsv.Begin(ctx, &target, nil) + require.NoError(t, err) + res, err2 := tsv.Execute(ctx, &target, executeSQL, nil, transactionID, 0, &querypb.ExecuteOptions{IncludedFields: 2}) + require.NoError(t, err2) + require.Equal(t, "keyspaceName", res.Fields[0].Database) + _, err = tsv.Commit(ctx, &target, transactionID) + require.NoError(t, err) +} + func setupTabletServerTest(t *testing.T, keyspaceName string) (*fakesqldb.DB, *TabletServer) { config := tabletenv.NewDefaultConfig() return setupTabletServerTestCustom(t, config, keyspaceName) From 007ad551009aec695cdba5c1e04a5bd926d2ed56 Mon Sep 17 00:00:00 2001 From: GuptaManan100 Date: Mon, 28 Sep 2020 12:04:20 +0530 Subject: [PATCH 03/12] Added test for StreamExecute which is currently failing Signed-off-by: GuptaManan100 --- .../tabletserver/tabletserver_test.go | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/go/vt/vttablet/tabletserver/tabletserver_test.go b/go/vt/vttablet/tabletserver/tabletserver_test.go index d2caaa3d8c3..9442ac9757c 100644 --- a/go/vt/vttablet/tabletserver/tabletserver_test.go +++ b/go/vt/vttablet/tabletserver/tabletserver_test.go @@ -2176,13 +2176,31 @@ func TestDatabaseNameReplaceByKeyspaceName(t *testing.T) { r := db.AddQuery(executeSQL, executeSQLResult) require.NotNil(t, r) target := tsv.sm.target + + // Testing Execute Method transactionID, _, err := tsv.Begin(ctx, &target, nil) require.NoError(t, err) - res, err2 := tsv.Execute(ctx, &target, executeSQL, nil, transactionID, 0, &querypb.ExecuteOptions{IncludedFields: 2}) + res, err2 := tsv.Execute(ctx, &target, executeSQL, nil, transactionID, 0, &querypb.ExecuteOptions{IncludedFields: querypb.ExecuteOptions_ALL}) require.NoError(t, err2) - require.Equal(t, "keyspaceName", res.Fields[0].Database) + for _, field := range res.Fields { + require.Equal(t, "keyspaceName", field.Database) + } _, err = tsv.Commit(ctx, &target, transactionID) require.NoError(t, err) + + // Testing StreamExecute Method + callback := func(res *sqltypes.Result) error { + for _, field := range res.Fields { + if field.Database != "" { + require.Equal(t, "keyspaceName", field.Database) + } + } + return nil + } + if err := tsv.StreamExecute(ctx, &target, executeSQL, nil, 0, &querypb.ExecuteOptions{IncludedFields: querypb.ExecuteOptions_ALL}, callback); err != nil { + t.Fatalf("TabletServer.StreamExecute should success: %s, but get error: %v", + executeSQL, err) + } } func setupTabletServerTest(t *testing.T, keyspaceName string) (*fakesqldb.DB, *TabletServer) { From 2916ce788cfb518d3ecf8299dfdd80c1681da98c Mon Sep 17 00:00:00 2001 From: GuptaManan100 Date: Mon, 28 Sep 2020 12:30:06 +0530 Subject: [PATCH 04/12] StreamExecute now replaces databaseName with keyspaceName Signed-off-by: GuptaManan100 --- go/vt/vttablet/tabletserver/tabletserver.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/go/vt/vttablet/tabletserver/tabletserver.go b/go/vt/vttablet/tabletserver/tabletserver.go index 02c0d9a6077..a79a7b5d9ec 100644 --- a/go/vt/vttablet/tabletserver/tabletserver.go +++ b/go/vt/vttablet/tabletserver/tabletserver.go @@ -685,7 +685,16 @@ func (tsv *TabletServer) StreamExecute(ctx context.Context, target *querypb.Targ logStats: logStats, tsv: tsv, } - return qre.Stream(callback) + newCallback := func(result *sqltypes.Result) error { + // Change database name in mysql output to the keyspace name + for _, f := range result.Fields { + if f.Database != "" { + f.Database = tsv.sm.target.Keyspace + } + } + return callback(result) + } + return qre.Stream(newCallback) }, ) } From cdd7063cf77e642fa6dbea677e45cd41a0050b7f Mon Sep 17 00:00:00 2001 From: GuptaManan100 Date: Mon, 28 Sep 2020 12:46:48 +0530 Subject: [PATCH 05/12] Added Test for ExecuteBatch Method Signed-off-by: GuptaManan100 --- .../tabletserver/tabletserver_test.go | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/go/vt/vttablet/tabletserver/tabletserver_test.go b/go/vt/vttablet/tabletserver/tabletserver_test.go index 9442ac9757c..d2f154a79ba 100644 --- a/go/vt/vttablet/tabletserver/tabletserver_test.go +++ b/go/vt/vttablet/tabletserver/tabletserver_test.go @@ -2201,6 +2201,26 @@ func TestDatabaseNameReplaceByKeyspaceName(t *testing.T) { t.Fatalf("TabletServer.StreamExecute should success: %s, but get error: %v", executeSQL, err) } + + // Testing ExecuteBatch Method + if results, err := tsv.ExecuteBatch(ctx, &target, []*querypb.BoundQuery{ + { + Sql: executeSQL, + BindVariables: nil, + }, + { + Sql: executeSQL, + BindVariables: nil, + }, + }, true, 0, &querypb.ExecuteOptions{IncludedFields: querypb.ExecuteOptions_ALL}); err != nil { + t.Fatal(err) + } else { + for _, res := range results { + for _, field := range res.Fields { + require.Equal(t, "keyspaceName", field.Database) + } + } + } } func setupTabletServerTest(t *testing.T, keyspaceName string) (*fakesqldb.DB, *TabletServer) { From 9d08d8ff5ee8a35fe827ad16b9333a6bc96755da Mon Sep 17 00:00:00 2001 From: GuptaManan100 Date: Mon, 28 Sep 2020 12:58:05 +0530 Subject: [PATCH 06/12] Added Test for BeginExecute Method Signed-off-by: GuptaManan100 --- go/vt/vttablet/tabletserver/tabletserver_test.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/go/vt/vttablet/tabletserver/tabletserver_test.go b/go/vt/vttablet/tabletserver/tabletserver_test.go index d2f154a79ba..2f2a6ca478f 100644 --- a/go/vt/vttablet/tabletserver/tabletserver_test.go +++ b/go/vt/vttablet/tabletserver/tabletserver_test.go @@ -2221,6 +2221,15 @@ func TestDatabaseNameReplaceByKeyspaceName(t *testing.T) { } } } + + // Test BeginExecute Method + res, transactionID, _, err = tsv.BeginExecute(ctx, &target, nil, executeSQL, nil, 0, &querypb.ExecuteOptions{IncludedFields: querypb.ExecuteOptions_ALL}) + require.NoError(t, err) + for _, field := range res.Fields { + require.Equal(t, "keyspaceName", field.Database) + } + _, err = tsv.Commit(ctx, &target, transactionID) + require.NoError(t, err) } func setupTabletServerTest(t *testing.T, keyspaceName string) (*fakesqldb.DB, *TabletServer) { From 9c1c054b8b1ca66dd03e0ff883697d6b5760d8b3 Mon Sep 17 00:00:00 2001 From: GuptaManan100 Date: Mon, 28 Sep 2020 14:00:11 +0530 Subject: [PATCH 07/12] Added Test for BeginExecuteBatch Method Signed-off-by: GuptaManan100 --- .../tabletserver/tabletserver_test.go | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/go/vt/vttablet/tabletserver/tabletserver_test.go b/go/vt/vttablet/tabletserver/tabletserver_test.go index 2f2a6ca478f..5f5fcc2295c 100644 --- a/go/vt/vttablet/tabletserver/tabletserver_test.go +++ b/go/vt/vttablet/tabletserver/tabletserver_test.go @@ -2230,6 +2230,28 @@ func TestDatabaseNameReplaceByKeyspaceName(t *testing.T) { } _, err = tsv.Commit(ctx, &target, transactionID) require.NoError(t, err) + + // Test BeginExecute Method + if results, transactionID, _, err := tsv.BeginExecuteBatch(ctx, &target, []*querypb.BoundQuery{ + { + Sql: executeSQL, + BindVariables: nil, + }, + { + Sql: executeSQL, + BindVariables: nil, + }, + }, false, &querypb.ExecuteOptions{IncludedFields: querypb.ExecuteOptions_ALL}); err != nil { + t.Fatal(err) + } else { + for _, res := range results { + for _, field := range res.Fields { + require.Equal(t, "keyspaceName", field.Database) + } + } + _, err = tsv.Commit(ctx, &target, transactionID) + require.NoError(t, err) + } } func setupTabletServerTest(t *testing.T, keyspaceName string) (*fakesqldb.DB, *TabletServer) { From 1017a96dfefae96363cf9c983a15e307d6d2f695 Mon Sep 17 00:00:00 2001 From: GuptaManan100 Date: Mon, 28 Sep 2020 14:05:40 +0530 Subject: [PATCH 08/12] Added Test for ReserveExecute Method Signed-off-by: GuptaManan100 --- go/vt/vttablet/tabletserver/tabletserver_test.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/go/vt/vttablet/tabletserver/tabletserver_test.go b/go/vt/vttablet/tabletserver/tabletserver_test.go index 5f5fcc2295c..05fa5863431 100644 --- a/go/vt/vttablet/tabletserver/tabletserver_test.go +++ b/go/vt/vttablet/tabletserver/tabletserver_test.go @@ -2252,6 +2252,15 @@ func TestDatabaseNameReplaceByKeyspaceName(t *testing.T) { _, err = tsv.Commit(ctx, &target, transactionID) require.NoError(t, err) } + + // Test ReserveExecute + res, rID, _, err := tsv.ReserveExecute(ctx, &target, nil, executeSQL, nil, 0, &querypb.ExecuteOptions{IncludedFields: querypb.ExecuteOptions_ALL}) + require.NoError(t, err) + for _, field := range res.Fields { + require.Equal(t, "keyspaceName", field.Database) + } + err = tsv.Release(ctx, &target, 0, rID) + require.NoError(t, err) } func setupTabletServerTest(t *testing.T, keyspaceName string) (*fakesqldb.DB, *TabletServer) { From e47c5a52e8346238fe6b61c33103252351a2d4a5 Mon Sep 17 00:00:00 2001 From: GuptaManan100 Date: Mon, 28 Sep 2020 14:07:55 +0530 Subject: [PATCH 09/12] Added Test for ReserveBeginExecute Method Signed-off-by: GuptaManan100 --- go/vt/vttablet/tabletserver/tabletserver_test.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/go/vt/vttablet/tabletserver/tabletserver_test.go b/go/vt/vttablet/tabletserver/tabletserver_test.go index 05fa5863431..ce7d4c0f879 100644 --- a/go/vt/vttablet/tabletserver/tabletserver_test.go +++ b/go/vt/vttablet/tabletserver/tabletserver_test.go @@ -2261,6 +2261,15 @@ func TestDatabaseNameReplaceByKeyspaceName(t *testing.T) { } err = tsv.Release(ctx, &target, 0, rID) require.NoError(t, err) + + // Test for ReserveBeginExecute + res, transactionID, reservedID, _, err := tsv.ReserveBeginExecute(ctx, &target, nil, executeSQL, nil, &querypb.ExecuteOptions{IncludedFields: querypb.ExecuteOptions_ALL}) + require.NoError(t, err) + for _, field := range res.Fields { + require.Equal(t, "keyspaceName", field.Database) + } + err = tsv.Release(ctx, &target, transactionID, reservedID) + require.NoError(t, err) } func setupTabletServerTest(t *testing.T, keyspaceName string) (*fakesqldb.DB, *TabletServer) { From ff06a029335b0020525df2086411a2ef14a8c6dd Mon Sep 17 00:00:00 2001 From: GuptaManan100 Date: Mon, 28 Sep 2020 17:49:10 +0530 Subject: [PATCH 10/12] Change database names only if they are not already stripped Signed-off-by: GuptaManan100 --- go/vt/vttablet/tabletserver/tabletserver.go | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/go/vt/vttablet/tabletserver/tabletserver.go b/go/vt/vttablet/tabletserver/tabletserver.go index a79a7b5d9ec..6288532cdc1 100644 --- a/go/vt/vttablet/tabletserver/tabletserver.go +++ b/go/vt/vttablet/tabletserver/tabletserver.go @@ -645,9 +645,11 @@ func (tsv *TabletServer) Execute(ctx context.Context, target *querypb.Target, sq result = result.StripMetadata(sqltypes.IncludeFieldsOrDefault(options)) // Change database name in mysql output to the keyspace name - for _, f := range result.Fields { - if f.Database != "" { - f.Database = tsv.sm.target.Keyspace + if sqltypes.IncludeFieldsOrDefault(options) == querypb.ExecuteOptions_ALL { + for _, f := range result.Fields { + if f.Database != "" { + f.Database = tsv.sm.target.Keyspace + } } } return nil @@ -686,10 +688,12 @@ func (tsv *TabletServer) StreamExecute(ctx context.Context, target *querypb.Targ tsv: tsv, } newCallback := func(result *sqltypes.Result) error { - // Change database name in mysql output to the keyspace name - for _, f := range result.Fields { - if f.Database != "" { - f.Database = tsv.sm.target.Keyspace + if sqltypes.IncludeFieldsOrDefault(options) == querypb.ExecuteOptions_ALL { + // Change database name in mysql output to the keyspace name + for _, f := range result.Fields { + if f.Database != "" { + f.Database = tsv.sm.target.Keyspace + } } } return callback(result) From 6854987f12540ff7906506a9333bde53c07b2442 Mon Sep 17 00:00:00 2001 From: GuptaManan100 Date: Mon, 28 Sep 2020 18:15:05 +0530 Subject: [PATCH 11/12] Split the test into separate tests Signed-off-by: GuptaManan100 --- .../tabletserver/tabletserver_test.go | 190 +++++++++++++++--- 1 file changed, 164 insertions(+), 26 deletions(-) diff --git a/go/vt/vttablet/tabletserver/tabletserver_test.go b/go/vt/vttablet/tabletserver/tabletserver_test.go index ce7d4c0f879..8ed0ed8323d 100644 --- a/go/vt/vttablet/tabletserver/tabletserver_test.go +++ b/go/vt/vttablet/tabletserver/tabletserver_test.go @@ -2154,7 +2154,7 @@ func TestReserveStats(t *testing.T) { assert.NotEmpty(t, tsv.te.txPool.env.Stats().UserReservedTimesNs.Counts()["test"]) } -func TestDatabaseNameReplaceByKeyspaceName(t *testing.T) { +func TestDatabaseNameReplaceByKeyspaceNameExecuteMethod(t *testing.T) { db, tsv := setupTabletServerTest(t, "keyspaceName") db.SetName("databaseInMysql") defer tsv.StopService() @@ -2180,13 +2180,37 @@ func TestDatabaseNameReplaceByKeyspaceName(t *testing.T) { // Testing Execute Method transactionID, _, err := tsv.Begin(ctx, &target, nil) require.NoError(t, err) - res, err2 := tsv.Execute(ctx, &target, executeSQL, nil, transactionID, 0, &querypb.ExecuteOptions{IncludedFields: querypb.ExecuteOptions_ALL}) - require.NoError(t, err2) + res, err := tsv.Execute(ctx, &target, executeSQL, nil, transactionID, 0, &querypb.ExecuteOptions{IncludedFields: querypb.ExecuteOptions_ALL}) + require.NoError(t, err) for _, field := range res.Fields { require.Equal(t, "keyspaceName", field.Database) } _, err = tsv.Commit(ctx, &target, transactionID) require.NoError(t, err) +} + +func TestDatabaseNameReplaceByKeyspaceNameStreamExecuteMethod(t *testing.T) { + db, tsv := setupTabletServerTest(t, "keyspaceName") + db.SetName("databaseInMysql") + defer tsv.StopService() + defer db.Close() + + executeSQL := "select * from test_table limit 1000" + executeSQLResult := &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Type: sqltypes.VarBinary, + Database: "databaseInMysql", + }, + }, + RowsAffected: 1, + Rows: [][]sqltypes.Value{ + {sqltypes.NewVarBinary("row01")}, + }, + } + r := db.AddQuery(executeSQL, executeSQLResult) + require.NotNil(t, r) + target := tsv.sm.target // Testing StreamExecute Method callback := func(res *sqltypes.Result) error { @@ -2197,13 +2221,35 @@ func TestDatabaseNameReplaceByKeyspaceName(t *testing.T) { } return nil } - if err := tsv.StreamExecute(ctx, &target, executeSQL, nil, 0, &querypb.ExecuteOptions{IncludedFields: querypb.ExecuteOptions_ALL}, callback); err != nil { - t.Fatalf("TabletServer.StreamExecute should success: %s, but get error: %v", - executeSQL, err) + err := tsv.StreamExecute(ctx, &target, executeSQL, nil, 0, &querypb.ExecuteOptions{IncludedFields: querypb.ExecuteOptions_ALL}, callback) + require.NoError(t, err) +} + +func TestDatabaseNameReplaceByKeyspaceNameExecuteBatchMethod(t *testing.T) { + db, tsv := setupTabletServerTest(t, "keyspaceName") + db.SetName("databaseInMysql") + defer tsv.StopService() + defer db.Close() + + executeSQL := "select * from test_table limit 1000" + executeSQLResult := &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Type: sqltypes.VarBinary, + Database: "databaseInMysql", + }, + }, + RowsAffected: 1, + Rows: [][]sqltypes.Value{ + {sqltypes.NewVarBinary("row01")}, + }, } + r := db.AddQuery(executeSQL, executeSQLResult) + require.NotNil(t, r) + target := tsv.sm.target // Testing ExecuteBatch Method - if results, err := tsv.ExecuteBatch(ctx, &target, []*querypb.BoundQuery{ + results, err := tsv.ExecuteBatch(ctx, &target, []*querypb.BoundQuery{ { Sql: executeSQL, BindVariables: nil, @@ -2212,27 +2258,73 @@ func TestDatabaseNameReplaceByKeyspaceName(t *testing.T) { Sql: executeSQL, BindVariables: nil, }, - }, true, 0, &querypb.ExecuteOptions{IncludedFields: querypb.ExecuteOptions_ALL}); err != nil { - t.Fatal(err) - } else { - for _, res := range results { - for _, field := range res.Fields { - require.Equal(t, "keyspaceName", field.Database) - } + }, true, 0, &querypb.ExecuteOptions{IncludedFields: querypb.ExecuteOptions_ALL}) + require.NoError(t, err) + for _, res := range results { + for _, field := range res.Fields { + require.Equal(t, "keyspaceName", field.Database) } } +} + +func TestDatabaseNameReplaceByKeyspaceNameBeginExecuteMethod(t *testing.T) { + db, tsv := setupTabletServerTest(t, "keyspaceName") + db.SetName("databaseInMysql") + defer tsv.StopService() + defer db.Close() + + executeSQL := "select * from test_table limit 1000" + executeSQLResult := &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Type: sqltypes.VarBinary, + Database: "databaseInMysql", + }, + }, + RowsAffected: 1, + Rows: [][]sqltypes.Value{ + {sqltypes.NewVarBinary("row01")}, + }, + } + r := db.AddQuery(executeSQL, executeSQLResult) + require.NotNil(t, r) + target := tsv.sm.target // Test BeginExecute Method - res, transactionID, _, err = tsv.BeginExecute(ctx, &target, nil, executeSQL, nil, 0, &querypb.ExecuteOptions{IncludedFields: querypb.ExecuteOptions_ALL}) + res, transactionID, _, err := tsv.BeginExecute(ctx, &target, nil, executeSQL, nil, 0, &querypb.ExecuteOptions{IncludedFields: querypb.ExecuteOptions_ALL}) require.NoError(t, err) for _, field := range res.Fields { require.Equal(t, "keyspaceName", field.Database) } _, err = tsv.Commit(ctx, &target, transactionID) require.NoError(t, err) +} - // Test BeginExecute Method - if results, transactionID, _, err := tsv.BeginExecuteBatch(ctx, &target, []*querypb.BoundQuery{ +func TestDatabaseNameReplaceByKeyspaceNameBeginExecuteBatchMethod(t *testing.T) { + db, tsv := setupTabletServerTest(t, "keyspaceName") + db.SetName("databaseInMysql") + defer tsv.StopService() + defer db.Close() + + executeSQL := "select * from test_table limit 1000" + executeSQLResult := &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Type: sqltypes.VarBinary, + Database: "databaseInMysql", + }, + }, + RowsAffected: 1, + Rows: [][]sqltypes.Value{ + {sqltypes.NewVarBinary("row01")}, + }, + } + r := db.AddQuery(executeSQL, executeSQLResult) + require.NotNil(t, r) + target := tsv.sm.target + + // Test BeginExecuteBatch Method + results, transactionID, _, err := tsv.BeginExecuteBatch(ctx, &target, []*querypb.BoundQuery{ { Sql: executeSQL, BindVariables: nil, @@ -2241,17 +2333,39 @@ func TestDatabaseNameReplaceByKeyspaceName(t *testing.T) { Sql: executeSQL, BindVariables: nil, }, - }, false, &querypb.ExecuteOptions{IncludedFields: querypb.ExecuteOptions_ALL}); err != nil { - t.Fatal(err) - } else { - for _, res := range results { - for _, field := range res.Fields { - require.Equal(t, "keyspaceName", field.Database) - } + }, false, &querypb.ExecuteOptions{IncludedFields: querypb.ExecuteOptions_ALL}) + require.NoError(t, err) + for _, res := range results { + for _, field := range res.Fields { + require.Equal(t, "keyspaceName", field.Database) } - _, err = tsv.Commit(ctx, &target, transactionID) - require.NoError(t, err) } + _, err = tsv.Commit(ctx, &target, transactionID) + require.NoError(t, err) +} + +func TestDatabaseNameReplaceByKeyspaceNameReserveExecuteMethod(t *testing.T) { + db, tsv := setupTabletServerTest(t, "keyspaceName") + db.SetName("databaseInMysql") + defer tsv.StopService() + defer db.Close() + + executeSQL := "select * from test_table limit 1000" + executeSQLResult := &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Type: sqltypes.VarBinary, + Database: "databaseInMysql", + }, + }, + RowsAffected: 1, + Rows: [][]sqltypes.Value{ + {sqltypes.NewVarBinary("row01")}, + }, + } + r := db.AddQuery(executeSQL, executeSQLResult) + require.NotNil(t, r) + target := tsv.sm.target // Test ReserveExecute res, rID, _, err := tsv.ReserveExecute(ctx, &target, nil, executeSQL, nil, 0, &querypb.ExecuteOptions{IncludedFields: querypb.ExecuteOptions_ALL}) @@ -2261,6 +2375,30 @@ func TestDatabaseNameReplaceByKeyspaceName(t *testing.T) { } err = tsv.Release(ctx, &target, 0, rID) require.NoError(t, err) +} + +func TestDatabaseNameReplaceByKeyspaceNameReserveBeginExecuteMethod(t *testing.T) { + db, tsv := setupTabletServerTest(t, "keyspaceName") + db.SetName("databaseInMysql") + defer tsv.StopService() + defer db.Close() + + executeSQL := "select * from test_table limit 1000" + executeSQLResult := &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Type: sqltypes.VarBinary, + Database: "databaseInMysql", + }, + }, + RowsAffected: 1, + Rows: [][]sqltypes.Value{ + {sqltypes.NewVarBinary("row01")}, + }, + } + r := db.AddQuery(executeSQL, executeSQLResult) + require.NotNil(t, r) + target := tsv.sm.target // Test for ReserveBeginExecute res, transactionID, reservedID, _, err := tsv.ReserveBeginExecute(ctx, &target, nil, executeSQL, nil, &querypb.ExecuteOptions{IncludedFields: querypb.ExecuteOptions_ALL}) From b01ea6ebe68fd4f6ac3bfde5cc113c97543c8b43 Mon Sep 17 00:00:00 2001 From: GuptaManan100 Date: Tue, 29 Sep 2020 11:02:29 +0530 Subject: [PATCH 12/12] Removed redundant checks Signed-off-by: GuptaManan100 --- .../tabletserver/tabletserver_test.go | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/go/vt/vttablet/tabletserver/tabletserver_test.go b/go/vt/vttablet/tabletserver/tabletserver_test.go index 8ed0ed8323d..01eaf7e6291 100644 --- a/go/vt/vttablet/tabletserver/tabletserver_test.go +++ b/go/vt/vttablet/tabletserver/tabletserver_test.go @@ -2173,8 +2173,7 @@ func TestDatabaseNameReplaceByKeyspaceNameExecuteMethod(t *testing.T) { {sqltypes.NewVarBinary("row01")}, }, } - r := db.AddQuery(executeSQL, executeSQLResult) - require.NotNil(t, r) + db.AddQuery(executeSQL, executeSQLResult) target := tsv.sm.target // Testing Execute Method @@ -2208,8 +2207,7 @@ func TestDatabaseNameReplaceByKeyspaceNameStreamExecuteMethod(t *testing.T) { {sqltypes.NewVarBinary("row01")}, }, } - r := db.AddQuery(executeSQL, executeSQLResult) - require.NotNil(t, r) + db.AddQuery(executeSQL, executeSQLResult) target := tsv.sm.target // Testing StreamExecute Method @@ -2244,8 +2242,7 @@ func TestDatabaseNameReplaceByKeyspaceNameExecuteBatchMethod(t *testing.T) { {sqltypes.NewVarBinary("row01")}, }, } - r := db.AddQuery(executeSQL, executeSQLResult) - require.NotNil(t, r) + db.AddQuery(executeSQL, executeSQLResult) target := tsv.sm.target // Testing ExecuteBatch Method @@ -2286,8 +2283,7 @@ func TestDatabaseNameReplaceByKeyspaceNameBeginExecuteMethod(t *testing.T) { {sqltypes.NewVarBinary("row01")}, }, } - r := db.AddQuery(executeSQL, executeSQLResult) - require.NotNil(t, r) + db.AddQuery(executeSQL, executeSQLResult) target := tsv.sm.target // Test BeginExecute Method @@ -2319,8 +2315,7 @@ func TestDatabaseNameReplaceByKeyspaceNameBeginExecuteBatchMethod(t *testing.T) {sqltypes.NewVarBinary("row01")}, }, } - r := db.AddQuery(executeSQL, executeSQLResult) - require.NotNil(t, r) + db.AddQuery(executeSQL, executeSQLResult) target := tsv.sm.target // Test BeginExecuteBatch Method @@ -2363,8 +2358,7 @@ func TestDatabaseNameReplaceByKeyspaceNameReserveExecuteMethod(t *testing.T) { {sqltypes.NewVarBinary("row01")}, }, } - r := db.AddQuery(executeSQL, executeSQLResult) - require.NotNil(t, r) + db.AddQuery(executeSQL, executeSQLResult) target := tsv.sm.target // Test ReserveExecute @@ -2396,8 +2390,7 @@ func TestDatabaseNameReplaceByKeyspaceNameReserveBeginExecuteMethod(t *testing.T {sqltypes.NewVarBinary("row01")}, }, } - r := db.AddQuery(executeSQL, executeSQLResult) - require.NotNil(t, r) + db.AddQuery(executeSQL, executeSQLResult) target := tsv.sm.target // Test for ReserveBeginExecute