diff --git a/session/bootstrap.go b/session/bootstrap.go index e2ef6f854e594..d380d91676772 100644 --- a/session/bootstrap.go +++ b/session/bootstrap.go @@ -794,16 +794,21 @@ const ( version111 = 111 // version112 modifies the view tidb_mdl_view version112 = 112 - // version113 modifies the following global variables default value: + // ... + // [version113, version119] is the version range reserved for patches of 6.5.x + // ... + // version113 sets tidb_server_memory_limit to "80%" + version113 = 113 + // version120 modifies the following global variables default value: // - foreign_key_checks: off -> on // - tidb_enable_foreign_key: off -> on // - tidb_store_batch_size: 0 -> 4 - version113 = 113 + version120 = 120 ) // currentBootstrapVersion is defined as a variable, so we can modify its value for testing. // please make sure this is the largest version -var currentBootstrapVersion int64 = version113 +var currentBootstrapVersion int64 = version120 // DDL owner key's expired time is ManagerSessionTTL seconds, we should wait the time and give more time to have a chance to finish it. var internalSQLTimeout = owner.ManagerSessionTTL + 15 @@ -924,6 +929,7 @@ var ( upgradeToVer111, upgradeToVer112, upgradeToVer113, + upgradeToVer120, } ) @@ -2295,7 +2301,14 @@ func upgradeToVer113(s Session, ver int64) { if ver >= version113 { return } + mustExecute(s, "UPDATE HIGH_PRIORITY %n.%n set VARIABLE_VALUE = %? where VARIABLE_NAME = %? and VARIABLE_VALUE = %?;", + mysql.SystemDB, mysql.GlobalVariablesTable, variable.DefTiDBServerMemoryLimit, variable.TiDBServerMemoryLimit, "0") +} +func upgradeToVer120(s Session, ver int64) { + if ver >= version120 { + return + } mustExecute(s, "REPLACE HIGH_PRIORITY INTO %n.%n VALUES (%?, %?);", mysql.SystemDB, mysql.GlobalVariablesTable, variable.ForeignKeyChecks, variable.On) mustExecute(s, "REPLACE HIGH_PRIORITY INTO %n.%n VALUES (%?, %?);", mysql.SystemDB, mysql.GlobalVariablesTable, variable.TiDBEnableForeignKey, variable.On) mustExecute(s, "REPLACE HIGH_PRIORITY INTO %n.%n VALUES (%?, %?);", mysql.SystemDB, mysql.GlobalVariablesTable, variable.TiDBEnableHistoricalStats, variable.On) diff --git a/session/bootstrap_test.go b/session/bootstrap_test.go index 832ba478dfed3..4c07d31d7bc49 100644 --- a/session/bootstrap_test.go +++ b/session/bootstrap_test.go @@ -1418,6 +1418,112 @@ func TestTiDBGCAwareUpgradeFrom630To650(t *testing.T) { require.Equal(t, "0", row.GetString(1)) } +func TestTiDBServerMemoryLimitUpgradeTo651_1(t *testing.T) { + ctx := context.Background() + store, _ := createStoreAndBootstrap(t) + defer func() { require.NoError(t, store.Close()) }() + + // upgrade from 6.5.0 to 6.5.1+. + ver112 := version112 + seV112 := createSessionAndSetID(t, store) + txn, err := store.Begin() + require.NoError(t, err) + m := meta.NewMeta(txn) + err = m.FinishBootstrap(int64(ver112)) + require.NoError(t, err) + err = txn.Commit(context.Background()) + require.NoError(t, err) + mustExec(t, seV112, fmt.Sprintf("update mysql.tidb set variable_value=%d where variable_name='tidb_server_version'", ver112)) + mustExec(t, seV112, fmt.Sprintf("update mysql.GLOBAL_VARIABLES set variable_value='%s' where variable_name='%s'", "0", variable.TiDBServerMemoryLimit)) + mustExec(t, seV112, "commit") + unsetStoreBootstrapped(store.UUID()) + ver, err := getBootstrapVersion(seV112) + require.NoError(t, err) + require.Equal(t, int64(ver112), ver) + + // We are now in 6.5.0, tidb_server_memory_limit is 0. + res := mustExecToRecodeSet(t, seV112, fmt.Sprintf("select * from mysql.GLOBAL_VARIABLES where variable_name='%s'", variable.TiDBServerMemoryLimit)) + chk := res.NewChunk(nil) + err = res.Next(ctx, chk) + require.NoError(t, err) + require.Equal(t, 1, chk.NumRows()) + row := chk.GetRow(0) + require.Equal(t, 2, row.Len()) + require.Equal(t, "0", row.GetString(1)) + + // Upgrade to 6.5.1+. + domCurVer, err := BootstrapSession(store) + require.NoError(t, err) + defer domCurVer.Close() + seCurVer := createSessionAndSetID(t, store) + ver, err = getBootstrapVersion(seCurVer) + require.NoError(t, err) + require.Equal(t, currentBootstrapVersion, ver) + + // We are now in 6.5.1+. + res = mustExecToRecodeSet(t, seCurVer, fmt.Sprintf("select * from mysql.GLOBAL_VARIABLES where variable_name='%s'", variable.TiDBServerMemoryLimit)) + chk = res.NewChunk(nil) + err = res.Next(ctx, chk) + require.NoError(t, err) + require.Equal(t, 1, chk.NumRows()) + row = chk.GetRow(0) + require.Equal(t, 2, row.Len()) + require.Equal(t, variable.DefTiDBServerMemoryLimit, row.GetString(1)) +} + +func TestTiDBServerMemoryLimitUpgradeTo651_2(t *testing.T) { + ctx := context.Background() + store, _ := createStoreAndBootstrap(t) + defer func() { require.NoError(t, store.Close()) }() + + // upgrade from 6.5.0 to 6.5.1+. + ver112 := version112 + seV112 := createSessionAndSetID(t, store) + txn, err := store.Begin() + require.NoError(t, err) + m := meta.NewMeta(txn) + err = m.FinishBootstrap(int64(ver112)) + require.NoError(t, err) + err = txn.Commit(context.Background()) + require.NoError(t, err) + mustExec(t, seV112, fmt.Sprintf("update mysql.tidb set variable_value=%d where variable_name='tidb_server_version'", ver112)) + mustExec(t, seV112, fmt.Sprintf("update mysql.GLOBAL_VARIABLES set variable_value='%s' where variable_name='%s'", "70%", variable.TiDBServerMemoryLimit)) + mustExec(t, seV112, "commit") + unsetStoreBootstrapped(store.UUID()) + ver, err := getBootstrapVersion(seV112) + require.NoError(t, err) + require.Equal(t, int64(ver112), ver) + + // We are now in 6.5.0, tidb_server_memory_limit is "70%". + res := mustExecToRecodeSet(t, seV112, fmt.Sprintf("select * from mysql.GLOBAL_VARIABLES where variable_name='%s'", variable.TiDBServerMemoryLimit)) + chk := res.NewChunk(nil) + err = res.Next(ctx, chk) + require.NoError(t, err) + require.Equal(t, 1, chk.NumRows()) + row := chk.GetRow(0) + require.Equal(t, 2, row.Len()) + require.Equal(t, "70%", row.GetString(1)) + + // Upgrade to 6.5.1+. + domCurVer, err := BootstrapSession(store) + require.NoError(t, err) + defer domCurVer.Close() + seCurVer := createSessionAndSetID(t, store) + ver, err = getBootstrapVersion(seCurVer) + require.NoError(t, err) + require.Equal(t, currentBootstrapVersion, ver) + + // We are now in 6.5.1+. + res = mustExecToRecodeSet(t, seCurVer, fmt.Sprintf("select * from mysql.GLOBAL_VARIABLES where variable_name='%s'", variable.TiDBServerMemoryLimit)) + chk = res.NewChunk(nil) + err = res.Next(ctx, chk) + require.NoError(t, err) + require.Equal(t, 1, chk.NumRows()) + row = chk.GetRow(0) + require.Equal(t, 2, row.Len()) + require.Equal(t, "70%", row.GetString(1)) +} + func TestTiDBGlobalVariablesDefaultValueUpgradeFrom630To660(t *testing.T) { ctx := context.Background() store, _ := createStoreAndBootstrap(t)