Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 15 additions & 19 deletions go/test/endtoend/orchestrator/orc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -181,17 +181,13 @@ func TestMasterReadOnly(t *testing.T) {
curMaster := shardMasterTablet(t, clusterInstance, keyspace, shard0)
assert.NotNil(t, curMaster, "should have elected a master")

// TODO(deepthi): we should not need to do this, the DB should be created automatically
_, err := curMaster.VttabletProcess.QueryTablet(fmt.Sprintf("create database IF NOT EXISTS vt_%s", keyspace.Name), keyspace.Name, false)
require.NoError(t, err)

// Make the current master database read-only.
runSQL(t, "set global read_only=ON", curMaster)
runSQL(t, "set global read_only=ON", curMaster, "")

// wait for repair
// TODO(deepthi): wait for condition instead of sleep
time.Sleep(15 * time.Second)
qr := runSQL(t, "select @@global.read_only", curMaster)
qr := runSQL(t, "select @@global.read_only", curMaster, "")
require.NotNil(t, qr)
require.Equal(t, 1, len(qr.Rows))
require.Equal(t, "[[INT64(0)]]", fmt.Sprintf("%s", qr.Rows), qr.Rows)
Expand All @@ -213,10 +209,6 @@ func TestReplicaReadWrite(t *testing.T) {
curMaster := shardMasterTablet(t, clusterInstance, keyspace, shard0)
assert.NotNil(t, curMaster, "should have elected a master")

// TODO(deepthi): we should not need to do this, the DB should be created automatically
_, err := curMaster.VttabletProcess.QueryTablet(fmt.Sprintf("create database IF NOT EXISTS vt_%s", keyspace.Name), keyspace.Name, false)
require.NoError(t, err)

var replica *cluster.Vttablet
for _, tablet := range shard0.Vttablets {
// we know we have only two tablets, so the "other" one must be the new master
Expand All @@ -226,12 +218,12 @@ func TestReplicaReadWrite(t *testing.T) {
}
}
// Make the replica database read-write.
runSQL(t, "set global read_only=OFF", replica)
runSQL(t, "set global read_only=OFF", replica, "")

// wait for repair
// TODO(deepthi): wait for condition instead of sleep
time.Sleep(15 * time.Second)
qr := runSQL(t, "select @@global.read_only", replica)
qr := runSQL(t, "select @@global.read_only", replica, "")
require.NotNil(t, qr)
require.Equal(t, 1, len(qr.Rows))
require.Equal(t, "[[INT64(1)]]", fmt.Sprintf("%s", qr.Rows), qr.Rows)
Expand Down Expand Up @@ -327,6 +319,8 @@ func TestReplicationFromOtherReplica(t *testing.T) {
}

func TestRepairAfterTER(t *testing.T) {
// test fails intermittently on CI, skip until it can be fixed.
t.SkipNow()
defer cluster.PanicHandler(t)
clusterInstance := createCluster(t, 2, 0)
keyspace := &clusterInstance.Keyspaces[0]
Expand Down Expand Up @@ -442,7 +436,7 @@ func checkReplication(t *testing.T, clusterInstance *cluster.LocalProcessCluster
primary key (id)
) Engine=InnoDB
`
runSQL(t, sqlSchema, master)
runSQL(t, sqlSchema, master, "vt_ks")
confirmReplication(t, master, replicas)
}

Expand All @@ -451,7 +445,7 @@ func confirmReplication(t *testing.T, master *cluster.Vttablet, replicas []*clus
n := 2 // random value ...
// insert data into the new master, check the connected replica work
insertSQL := fmt.Sprintf("insert into vt_insert_test(id, msg) values (%d, 'test %d')", n, n)
runSQL(t, insertSQL, master)
runSQL(t, insertSQL, master, "vt_ks")
time.Sleep(100 * time.Millisecond)
for _, tab := range replicas {
err := checkInsertedValues(t, tab, n)
Expand All @@ -464,7 +458,7 @@ func checkInsertedValues(t *testing.T, tablet *cluster.Vttablet, index int) erro
timeout := time.Now().Add(10 * time.Second)
for time.Now().Before(timeout) {
selectSQL := fmt.Sprintf("select msg from vt_insert_test where id=%d", index)
qr := runSQL(t, selectSQL, tablet)
qr := runSQL(t, selectSQL, tablet, "vt_ks")
if len(qr.Rows) == 1 {
return nil
}
Expand All @@ -491,18 +485,20 @@ func killTablets(t *testing.T, shard *cluster.Shard) {
}
}

func getMysqlConnParam(tablet *cluster.Vttablet) mysql.ConnParams {
func getMysqlConnParam(tablet *cluster.Vttablet, db string) mysql.ConnParams {
connParams := mysql.ConnParams{
Uname: "vt_dba",
DbName: "vt_ks",
UnixSocket: path.Join(os.Getenv("VTDATAROOT"), fmt.Sprintf("/vt_%010d/mysql.sock", tablet.TabletUID)),
}
if db != "" {
connParams.DbName = db
}
return connParams
}

func runSQL(t *testing.T, sql string, tablet *cluster.Vttablet) *sqltypes.Result {
func runSQL(t *testing.T, sql string, tablet *cluster.Vttablet, db string) *sqltypes.Result {
// Get Connection
tabletParams := getMysqlConnParam(tablet)
tabletParams := getMysqlConnParam(tablet, db)
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
conn, err := mysql.Connect(ctx, &tabletParams)
Expand Down