Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
Signed-off-by: Weizhen Wang <wangweizhen@pingcap.com>
  • Loading branch information
hawkingrei committed Mar 23, 2023
1 parent 390f814 commit 87244bd
Show file tree
Hide file tree
Showing 4 changed files with 159 additions and 134 deletions.
134 changes: 0 additions & 134 deletions session/bootstrap_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@ import (
"context"
"fmt"
"os"
"strconv"
"strings"
"testing"
"time"

Expand Down Expand Up @@ -679,138 +677,6 @@ func TestUpgradeClusteredIndexDefaultValue(t *testing.T) {
domV68.Close()
}

func TestUpgradeVersion66(t *testing.T) {
ctx := context.Background()
store, dom := createStoreAndBootstrap(t)
defer func() { require.NoError(t, store.Close()) }()
seV65 := createSessionAndSetID(t, store)
txn, err := store.Begin()
require.NoError(t, err)
m := meta.NewMeta(txn)
err = m.FinishBootstrap(int64(65))
require.NoError(t, err)
err = txn.Commit(context.Background())
require.NoError(t, err)
mustExec(t, seV65, "update mysql.tidb set variable_value='65' where variable_name='tidb_server_version'")
mustExec(t, seV65, "set @@global.tidb_track_aggregate_memory_usage = 0")
mustExec(t, seV65, "commit")
unsetStoreBootstrapped(store.UUID())
ver, err := getBootstrapVersion(seV65)
require.NoError(t, err)
require.Equal(t, int64(65), ver)
dom.Close()
domV66, err := BootstrapSession(store)
require.NoError(t, err)

seV66 := createSessionAndSetID(t, store)
ver, err = getBootstrapVersion(seV66)
require.NoError(t, err)
require.Equal(t, currentBootstrapVersion, ver)
r := mustExecToRecodeSet(t, seV66, `select @@global.tidb_track_aggregate_memory_usage, @@session.tidb_track_aggregate_memory_usage`)
req := r.NewChunk(nil)
require.NoError(t, r.Next(ctx, req))
require.Equal(t, 1, req.NumRows())
row := req.GetRow(0)
require.Equal(t, int64(1), row.GetInt64(0))
require.Equal(t, int64(1), row.GetInt64(1))
domV66.Close()
}

func TestUpgradeVersion74(t *testing.T) {
ctx := context.Background()

cases := []struct {
oldValue int
newValue int
}{
{200, 3000},
{3000, 3000},
{3001, 3001},
}

for _, ca := range cases {
func() {
store, dom := createStoreAndBootstrap(t)
defer func() { require.NoError(t, store.Close()) }()

seV73 := createSessionAndSetID(t, store)
txn, err := store.Begin()
require.NoError(t, err)
m := meta.NewMeta(txn)
err = m.FinishBootstrap(int64(73))
require.NoError(t, err)
err = txn.Commit(context.Background())
require.NoError(t, err)
mustExec(t, seV73, "update mysql.tidb set variable_value='72' where variable_name='tidb_server_version'")
mustExec(t, seV73, "set @@global.tidb_stmt_summary_max_stmt_count = "+strconv.Itoa(ca.oldValue))
mustExec(t, seV73, "commit")
unsetStoreBootstrapped(store.UUID())
ver, err := getBootstrapVersion(seV73)
require.NoError(t, err)
require.Equal(t, int64(72), ver)
dom.Close()
domV74, err := BootstrapSession(store)
require.NoError(t, err)
defer domV74.Close()
seV74 := createSessionAndSetID(t, store)
ver, err = getBootstrapVersion(seV74)
require.NoError(t, err)
require.Equal(t, currentBootstrapVersion, ver)
r := mustExecToRecodeSet(t, seV74, `SELECT @@global.tidb_stmt_summary_max_stmt_count`)
req := r.NewChunk(nil)
require.NoError(t, r.Next(ctx, req))
require.Equal(t, 1, req.NumRows())
row := req.GetRow(0)
require.Equal(t, strconv.Itoa(ca.newValue), row.GetString(0))
}()
}
}

func TestUpgradeVersion75(t *testing.T) {
ctx := context.Background()

store, dom := createStoreAndBootstrap(t)
defer func() { require.NoError(t, store.Close()) }()

seV74 := createSessionAndSetID(t, store)
txn, err := store.Begin()
require.NoError(t, err)
m := meta.NewMeta(txn)
err = m.FinishBootstrap(int64(74))
require.NoError(t, err)
err = txn.Commit(context.Background())
require.NoError(t, err)
mustExec(t, seV74, "update mysql.tidb set variable_value='74' where variable_name='tidb_server_version'")
mustExec(t, seV74, "commit")
mustExec(t, seV74, "ALTER TABLE mysql.user DROP PRIMARY KEY")
mustExec(t, seV74, "ALTER TABLE mysql.user MODIFY COLUMN Host CHAR(64)")
mustExec(t, seV74, "ALTER TABLE mysql.user ADD PRIMARY KEY(Host, User)")
unsetStoreBootstrapped(store.UUID())
ver, err := getBootstrapVersion(seV74)
require.NoError(t, err)
require.Equal(t, int64(74), ver)
r := mustExecToRecodeSet(t, seV74, `desc mysql.user`)
req := r.NewChunk(nil)
row := req.GetRow(0)
require.NoError(t, r.Next(ctx, req))
require.Equal(t, "host", strings.ToLower(row.GetString(0)))
require.Equal(t, "char(64)", strings.ToLower(row.GetString(1)))
dom.Close()
domV75, err := BootstrapSession(store)
require.NoError(t, err)
defer domV75.Close()
seV75 := createSessionAndSetID(t, store)
ver, err = getBootstrapVersion(seV75)
require.NoError(t, err)
require.Equal(t, currentBootstrapVersion, ver)
r = mustExecToRecodeSet(t, seV75, `desc mysql.user`)
req = r.NewChunk(nil)
row = req.GetRow(0)
require.NoError(t, r.Next(ctx, req))
require.Equal(t, "host", strings.ToLower(row.GetString(0)))
require.Equal(t, "char(255)", strings.ToLower(row.GetString(1)))
}

func TestForIssue23387(t *testing.T) {
// For issue https://github.com/pingcap/tidb/issues/23387
saveCurrentBootstrapVersion := currentBootstrapVersion
Expand Down
1 change: 1 addition & 0 deletions session/bootstraptest/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ go_test(
],
flaky = True,
race = "on",
shard_count = 5,
deps = [
"//config",
"//session", #keep
Expand Down
132 changes: 132 additions & 0 deletions session/bootstraptest/bootstrap_upgrade_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,3 +88,135 @@ func TestUpgradeVersion84(t *testing.T) {
require.Equal(t, statsHistoryTblFields[i].tp, strings.ToLower(row.GetString(1)))
}
}

func TestUpgradeVersion66(t *testing.T) {
ctx := context.Background()
store, dom := session.CreateStoreAndBootstrap(t)
defer func() { require.NoError(t, store.Close()) }()
seV65 := session.CreateSessionAndSetID(t, store)
txn, err := store.Begin()
require.NoError(t, err)
m := meta.NewMeta(txn)
err = m.FinishBootstrap(int64(65))
require.NoError(t, err)
err = txn.Commit(context.Background())
require.NoError(t, err)
mustExec(t, seV65, "update mysql.tidb set variable_value='65' where variable_name='tidb_server_version'")
mustExec(t, seV65, "set @@global.tidb_track_aggregate_memory_usage = 0")
mustExec(t, seV65, "commit")
unsetStoreBootstrapped(store.UUID())
ver, err := session.GetBootstrapVersion(seV65)
require.NoError(t, err)
require.Equal(t, int64(65), ver)
dom.Close()
domV66, err := session.BootstrapSession(store)
require.NoError(t, err)

seV66 := session.CreateSessionAndSetID(t, store)
ver, err = session.GetBootstrapVersion(seV66)
require.NoError(t, err)
require.Equal(t, currentBootstrapVersion, ver)
r := mustExecToRecodeSet(t, seV66, `select @@global.tidb_track_aggregate_memory_usage, @@session.tidb_track_aggregate_memory_usage`)
req := r.NewChunk(nil)
require.NoError(t, r.Next(ctx, req))
require.Equal(t, 1, req.NumRows())
row := req.GetRow(0)
require.Equal(t, int64(1), row.GetInt64(0))
require.Equal(t, int64(1), row.GetInt64(1))
domV66.Close()
}

func TestUpgradeVersion74(t *testing.T) {
ctx := context.Background()

cases := []struct {
oldValue int
newValue int
}{
{200, 3000},
{3000, 3000},
{3001, 3001},
}

for _, ca := range cases {
func() {
store, dom := session.CreateStoreAndBootstrap(t)
defer func() { require.NoError(t, store.Close()) }()

seV73 := session.CreateSessionAndSetID(t, store)
txn, err := store.Begin()
require.NoError(t, err)
m := meta.NewMeta(txn)
err = m.FinishBootstrap(int64(73))
require.NoError(t, err)
err = txn.Commit(context.Background())
require.NoError(t, err)
mustExec(t, seV73, "update mysql.tidb set variable_value='72' where variable_name='tidb_server_version'")
mustExec(t, seV73, "set @@global.tidb_stmt_summary_max_stmt_count = "+strconv.Itoa(ca.oldValue))
mustExec(t, seV73, "commit")
unsetStoreBootstrapped(store.UUID())
ver, err := session.GetBootstrapVersion(seV73)
require.NoError(t, err)
require.Equal(t, int64(72), ver)
dom.Close()
domV74, err := session.BootstrapSession(store)
require.NoError(t, err)
defer domV74.Close()
seV74 := session.CreateSessionAndSetID(t, store)
ver, err = session.GetBootstrapVersion(seV74)
require.NoError(t, err)
require.Equal(t, currentBootstrapVersion, ver)
r := mustExecToRecodeSet(t, seV74, `SELECT @@global.tidb_stmt_summary_max_stmt_count`)
req := r.NewChunk(nil)
require.NoError(t, r.Next(ctx, req))
require.Equal(t, 1, req.NumRows())
row := req.GetRow(0)
require.Equal(t, strconv.Itoa(ca.newValue), row.GetString(0))
}()
}
}

func TestUpgradeVersion75(t *testing.T) {
ctx := context.Background()

store, dom := session.CreateStoreAndBootstrap(t)
defer func() { require.NoError(t, store.Close()) }()

seV74 := session.CreateSessionAndSetID(t, store)
txn, err := store.Begin()
require.NoError(t, err)
m := meta.NewMeta(txn)
err = m.FinishBootstrap(int64(74))
require.NoError(t, err)
err = txn.Commit(context.Background())
require.NoError(t, err)
mustExec(t, seV74, "update mysql.tidb set variable_value='74' where variable_name='tidb_server_version'")
mustExec(t, seV74, "commit")
mustExec(t, seV74, "ALTER TABLE mysql.user DROP PRIMARY KEY")
mustExec(t, seV74, "ALTER TABLE mysql.user MODIFY COLUMN Host CHAR(64)")
mustExec(t, seV74, "ALTER TABLE mysql.user ADD PRIMARY KEY(Host, User)")
unsetStoreBootstrapped(store.UUID())
ver, err := session.GetBootstrapVersion(seV74)
require.NoError(t, err)
require.Equal(t, int64(74), ver)
r := mustExecToRecodeSet(t, seV74, `desc mysql.user`)
req := r.NewChunk(nil)
row := req.GetRow(0)
require.NoError(t, r.Next(ctx, req))
require.Equal(t, "host", strings.ToLower(row.GetString(0)))
require.Equal(t, "char(64)", strings.ToLower(row.GetString(1)))
dom.Close()
domV75, err := session.BootstrapSession(store)
require.NoError(t, err)
defer domV75.Close()
seV75 := session.CreateSessionAndSetID(t, store)
ver, err = session.GetBootstrapVersion(seV75)
require.NoError(t, err)
require.Equal(t, currentBootstrapVersion, ver)
r = mustExecToRecodeSet(t, seV75, `desc mysql.user`)
req = r.NewChunk(nil)
row = req.GetRow(0)
require.NoError(t, r.Next(ctx, req))
require.Equal(t, "host", strings.ToLower(row.GetString(0)))
require.Equal(t, "char(255)", strings.ToLower(row.GetString(1)))
}
26 changes: 26 additions & 0 deletions session/testutil.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,35 @@

package session

import (
"testing"

"github.com/pingcap/tidb/domain"
"github.com/pingcap/tidb/kv"
"github.com/pingcap/tidb/store/mockstore"
"github.com/stretchr/testify/require"
)

var (
// GetBootstrapVersion is used in test
GetBootstrapVersion = getBootstrapVersion
// CurrentBootstrapVersion is used in test
CurrentBootstrapVersion = currentBootstrapVersion
)

func CreateStoreAndBootstrap(t *testing.T) (kv.Storage, *domain.Domain) {
store, err := mockstore.NewMockStore()
require.NoError(t, err)
dom, err := BootstrapSession(store)
require.NoError(t, err)
return store, dom
}

var sessionKitIDGenerator atomic.Uint64

func CreateSessionAndSetID(t *testing.T, store kv.Storage) Session {
se, err := CreateSession4Test(store)
se.SetConnectionID(sessionKitIDGenerator.Inc())
require.NoError(t, err)
return se
}

0 comments on commit 87244bd

Please sign in to comment.