Revert "[MM-41576] Revamp database schema version (#19586)" (#19746)

* Revert "[MM-41576] Revamp database schema version (#19586)"

This reverts commit 645fee3fe3.

* Revert "MM-42049 - license endpoint not working (#19686)"

This reverts commit 4fe89e5847.
Этот коммит содержится в:
Jesse Hallam
2022-03-08 16:28:28 -04:00
коммит произвёл GitHub
родитель eff39010d8
Коммит a2a78577e9
47 изменённых файлов: 215 добавлений и 475 удалений

Просмотреть файл

@@ -11781,6 +11781,10 @@ func (s *OpenTracingLayer) DropAllTables() {
s.Store.DropAllTables()
}
func (s *OpenTracingLayer) GetCurrentSchemaVersion() string {
return s.Store.GetCurrentSchemaVersion()
}
func (s *OpenTracingLayer) LockToMaster() {
s.Store.LockToMaster()
}

Просмотреть файл

@@ -13422,6 +13422,10 @@ func (s *RetryLayer) DropAllTables() {
s.Store.DropAllTables()
}
func (s *RetryLayer) GetCurrentSchemaVersion() string {
return s.Store.GetCurrentSchemaVersion()
}
func (s *RetryLayer) LockToMaster() {
s.Store.LockToMaster()
}

Просмотреть файл

@@ -353,10 +353,10 @@ func (ss *SqlStore) DriverName() string {
return *ss.settings.DriverName
}
func (ss *SqlStore) getCurrentSchemaVersion() (string, error) {
func (ss *SqlStore) GetCurrentSchemaVersion() string {
var version string
err := ss.GetMasterX().Get(&version, "SELECT Value FROM Systems WHERE Name='Version'")
return version, err
_ = ss.GetMasterX().Get(&version, "SELECT Value FROM Systems WHERE Name='Version'")
return version
}
// GetDbVersion returns the version of the database being used.
@@ -948,7 +948,6 @@ func (ss *SqlStore) DropAllTables() {
FROM pg_class
WHERE relkind = 'r' -- only tables
AND relnamespace = 'public'::regnamespace
AND NOT relname = 'db_migrations'
);
END
$func$;`)
@@ -956,9 +955,7 @@ func (ss *SqlStore) DropAllTables() {
tables := []string{}
ss.masterX.Select(&tables, `show tables`)
for _, t := range tables {
if t != "db_migrations" {
ss.masterX.Exec(`TRUNCATE TABLE ` + t)
}
ss.masterX.Exec(`TRUNCATE TABLE ` + t)
}
}
}
@@ -1198,20 +1195,3 @@ func (ss *SqlStore) toReserveCase(str string) string {
return fmt.Sprintf("`%s`", strings.Title(str))
}
func (ss *SqlStore) GetDBSchemaVersion() (int, error) {
var version int
if err := ss.GetMasterX().Get(&version, "SELECT Version FROM db_migrations ORDER BY Version DESC LIMIT 1"); err != nil {
return 0, errors.Wrap(err, "unable to select from db_migrations")
}
return version, nil
}
func (ss *SqlStore) GetAppliedMigrations() ([]model.AppliedMigration, error) {
migrations := []model.AppliedMigration{}
if err := ss.GetMasterX().Select(&migrations, "SELECT Version, Name FROM db_migrations ORDER BY Version DESC"); err != nil {
return nil, errors.Wrap(err, "unable to select from db_migrations")
}
return migrations, nil
}

Просмотреть файл

@@ -6,11 +6,7 @@ package sqlstore
import (
"fmt"
"os"
"path/filepath"
"regexp"
"sort"
"strconv"
"strings"
"sync"
"testing"
"time"
@@ -22,7 +18,6 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/mattermost/mattermost-server/v6/db/migrations"
"github.com/mattermost/mattermost-server/v6/einterfaces/mocks"
"github.com/mattermost/mattermost-server/v6/model"
"github.com/mattermost/mattermost-server/v6/store"
@@ -789,71 +784,3 @@ func TestMySQLReadTimeout(t *testing.T) {
_, err = store.GetMasterX().ExecNoTimeout(`SELECT SLEEP(3)`)
require.NoError(t, err)
}
func TestGetDBSchemaVersion(t *testing.T) {
testDrivers := []string{
model.DatabaseDriverPostgres,
model.DatabaseDriverMysql,
}
for _, driver := range testDrivers {
t.Run("Should return latest version number of applied migrations for "+driver, func(t *testing.T) {
t.Parallel()
settings := makeSqlSettings(driver)
store := New(*settings, nil)
var assetNamesForDriver []string
for _, assetName := range migrations.AssetNames() {
if strings.HasPrefix(assetName, store.DriverName()) {
assetNamesForDriver = append(assetNamesForDriver, filepath.Base(assetName))
}
}
sort.Strings(assetNamesForDriver)
require.NotEmpty(t, assetNamesForDriver)
lastMigration := assetNamesForDriver[len(assetNamesForDriver)-1]
expectedVersion := strings.Split(lastMigration, "_")[0]
version, err := store.GetDBSchemaVersion()
require.NoError(t, err)
require.Equal(t, expectedVersion, fmt.Sprintf("%06d", version))
})
}
}
func TestGetAppliedMigrations(t *testing.T) {
testDrivers := []string{
model.DatabaseDriverPostgres,
model.DatabaseDriverMysql,
}
for _, driver := range testDrivers {
t.Run("Should return db applied migrations for "+driver, func(t *testing.T) {
t.Parallel()
settings := makeSqlSettings(driver)
store := New(*settings, nil)
var migrationsFromFiles []model.AppliedMigration
for _, assetName := range migrations.AssetNames() {
if strings.HasPrefix(assetName, store.DriverName()) && strings.HasSuffix(assetName, ".up.sql") {
versionString := strings.Split(filepath.Base(assetName), "_")[0]
version, err := strconv.Atoi(versionString)
require.NoError(t, err)
name := strings.TrimSuffix(strings.TrimLeft(filepath.Base(assetName), versionString+"_"), ".up.sql")
migrationsFromFiles = append(migrationsFromFiles, model.AppliedMigration{
Version: version,
Name: name,
})
}
}
require.NotEmpty(t, migrationsFromFiles)
migrations, err := store.GetAppliedMigrations()
require.NoError(t, err)
require.ElementsMatch(t, migrationsFromFiles, migrations)
})
}
}

Просмотреть файл

@@ -114,12 +114,8 @@ func upgradeDatabase(sqlStore *SqlStore, currentModelVersionString string) error
return errors.Wrapf(err, "failed to parse oldest supported version %s", OldestSupportedVersion)
}
currentSchemaVersionString, err := sqlStore.getCurrentSchemaVersion()
if err != nil {
mlog.Warn("could not receive the schema version from systems table", mlog.Err(err))
}
var currentSchemaVersion *semver.Version
currentSchemaVersionString := sqlStore.GetCurrentSchemaVersion()
if currentSchemaVersionString != "" {
currentSchemaVersion, err = semver.New(currentSchemaVersionString)
if err != nil {
@@ -236,11 +232,7 @@ func saveSchemaVersion(sqlStore *SqlStore, version string) {
}
func shouldPerformUpgrade(sqlStore *SqlStore, currentSchemaVersion string, expectedSchemaVersion string) bool {
storedSchemaVersion, err := sqlStore.getCurrentSchemaVersion()
if err != nil {
mlog.Error("could not receive the schema version from systems table", mlog.Err(err))
return false
}
storedSchemaVersion := sqlStore.GetCurrentSchemaVersion()
storedVersion, err := semver.Parse(storedSchemaVersion)
if err != nil {

Просмотреть файл

@@ -17,11 +17,7 @@ func TestStoreUpgradeDotRelease(t *testing.T) {
saveSchemaVersion(sqlStore, "5.33.1")
err := upgradeDatabase(sqlStore, CurrentSchemaVersion)
require.NoError(t, err)
currentVersion, err := sqlStore.getCurrentSchemaVersion()
require.NoError(t, err)
require.Equal(t, CurrentSchemaVersion, currentVersion)
require.Equal(t, CurrentSchemaVersion, sqlStore.GetCurrentSchemaVersion())
})
}
@@ -38,44 +34,28 @@ func TestStoreUpgrade(t *testing.T) {
saveSchemaVersion(sqlStore, "invalid")
err := upgradeDatabase(sqlStore, "5.8.0")
require.EqualError(t, err, "failed to parse database schema version invalid: No Major.Minor.Patch elements found")
currentVersion, err := sqlStore.getCurrentSchemaVersion()
require.NoError(t, err)
require.Equal(t, "invalid", currentVersion)
require.Equal(t, "invalid", sqlStore.GetCurrentSchemaVersion())
})
t.Run("upgrade from unsupported version", func(t *testing.T) {
saveSchemaVersion(sqlStore, "2.0.0")
err := upgradeDatabase(sqlStore, "5.8.0")
require.EqualError(t, err, "Database schema version 2.0.0 is no longer supported. This Mattermost server supports automatic upgrades from schema version 3.0.0 through schema version 5.8.0. Please manually upgrade to at least version 3.0.0 before continuing.")
currentVersion, err := sqlStore.getCurrentSchemaVersion()
require.NoError(t, err)
require.Equal(t, "2.0.0", currentVersion)
require.Equal(t, "2.0.0", sqlStore.GetCurrentSchemaVersion())
})
t.Run("upgrade from earliest supported version", func(t *testing.T) {
saveSchemaVersion(sqlStore, Version300)
err := upgradeDatabase(sqlStore, CurrentSchemaVersion)
require.NoError(t, err)
currentVersion, err := sqlStore.getCurrentSchemaVersion()
require.NoError(t, err)
require.Equal(t, CurrentSchemaVersion, currentVersion)
require.Equal(t, CurrentSchemaVersion, sqlStore.GetCurrentSchemaVersion())
})
t.Run("upgrade from no existing version", func(t *testing.T) {
saveSchemaVersion(sqlStore, "")
err := upgradeDatabase(sqlStore, CurrentSchemaVersion)
require.NoError(t, err)
currentVersion, err := sqlStore.getCurrentSchemaVersion()
require.NoError(t, err)
require.Equal(t, CurrentSchemaVersion, currentVersion)
require.Equal(t, CurrentSchemaVersion, sqlStore.GetCurrentSchemaVersion())
})
t.Run("upgrade schema running earlier minor version", func(t *testing.T) {
@@ -84,44 +64,28 @@ func TestStoreUpgrade(t *testing.T) {
require.NoError(t, err)
// Assert CurrentSchemaVersion, not 5.8.0, since the migrations will move
// past 5.8.0 regardless of the input parameter.
currentVersion, err := sqlStore.getCurrentSchemaVersion()
require.NoError(t, err)
require.Equal(t, CurrentSchemaVersion, currentVersion)
require.Equal(t, CurrentSchemaVersion, sqlStore.GetCurrentSchemaVersion())
})
t.Run("upgrade schema running later minor version", func(t *testing.T) {
saveSchemaVersion(sqlStore, "5.99.0")
err := upgradeDatabase(sqlStore, "5.8.0")
require.NoError(t, err)
currentVersion, err := sqlStore.getCurrentSchemaVersion()
require.NoError(t, err)
require.Equal(t, "5.99.0", currentVersion)
require.Equal(t, "5.99.0", sqlStore.GetCurrentSchemaVersion())
})
t.Run("upgrade schema running earlier major version", func(t *testing.T) {
saveSchemaVersion(sqlStore, "4.1.0")
err := upgradeDatabase(sqlStore, CurrentSchemaVersion)
require.NoError(t, err)
currentVersion, err := sqlStore.getCurrentSchemaVersion()
require.NoError(t, err)
require.Equal(t, CurrentSchemaVersion, currentVersion)
require.Equal(t, CurrentSchemaVersion, sqlStore.GetCurrentSchemaVersion())
})
t.Run("upgrade schema running later major version", func(t *testing.T) {
saveSchemaVersion(sqlStore, "6.0.0")
err := upgradeDatabase(sqlStore, "5.8.0")
require.EqualError(t, err, "Database schema version 6.0.0 is not supported. This Mattermost server supports only >=5.8.0, <6.0.0. Please upgrade to at least version 6.0.0 before continuing.")
currentVersion, err := sqlStore.getCurrentSchemaVersion()
require.NoError(t, err)
require.Equal(t, "6.0.0", currentVersion)
require.Equal(t, "6.0.0", sqlStore.GetCurrentSchemaVersion())
})
})
}
@@ -136,11 +100,7 @@ func TestSaveSchemaVersion(t *testing.T) {
require.NoError(t, err)
require.Equal(t, Version300, props["Version"])
currentVersion, err := sqlStore.getCurrentSchemaVersion()
require.NoError(t, err)
require.Equal(t, Version300, currentVersion)
require.Equal(t, Version300, sqlStore.GetCurrentSchemaVersion())
})
t.Run("set current version", func(t *testing.T) {
@@ -149,11 +109,7 @@ func TestSaveSchemaVersion(t *testing.T) {
require.NoError(t, err)
require.Equal(t, CurrentSchemaVersion, props["Version"])
currentVersion, err := sqlStore.getCurrentSchemaVersion()
require.NoError(t, err)
require.Equal(t, CurrentSchemaVersion, currentVersion)
require.Equal(t, CurrentSchemaVersion, sqlStore.GetCurrentSchemaVersion())
})
})
}

Просмотреть файл

@@ -63,8 +63,7 @@ type Store interface {
UnlockFromMaster()
DropAllTables()
RecycleDBConnections(d time.Duration)
GetDBSchemaVersion() (int, error)
GetAppliedMigrations() ([]model.AppliedMigration, error)
GetCurrentSchemaVersion() string
GetDbVersion(numerical bool) (string, error)
TotalMasterDbConnections() int
TotalReadDbConnections() int

Просмотреть файл

@@ -222,48 +222,18 @@ func (_m *Store) FileInfo() store.FileInfoStore {
return r0
}
// GetAppliedMigrations provides a mock function with given fields:
func (_m *Store) GetAppliedMigrations() ([]model.AppliedMigration, error) {
// GetCurrentSchemaVersion provides a mock function with given fields:
func (_m *Store) GetCurrentSchemaVersion() string {
ret := _m.Called()
var r0 []model.AppliedMigration
if rf, ok := ret.Get(0).(func() []model.AppliedMigration); ok {
var r0 string
if rf, ok := ret.Get(0).(func() string); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).([]model.AppliedMigration)
}
r0 = ret.Get(0).(string)
}
var r1 error
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
// GetDBSchemaVersion provides a mock function with given fields:
func (_m *Store) GetDBSchemaVersion() (int, error) {
ret := _m.Called()
var r0 int
if rf, ok := ret.Get(0).(func() int); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(int)
}
var r1 error
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
return r0
}
// GetDbVersion provides a mock function with given fields: numerical

Просмотреть файл

@@ -104,13 +104,10 @@ func (s *Store) UnlockFromMaster() { /* do nothing */ }
func (s *Store) DropAllTables() { /* do nothing */ }
func (s *Store) GetDbVersion(bool) (string, error) { return "", nil }
func (s *Store) RecycleDBConnections(time.Duration) {}
func (s *Store) GetDBSchemaVersion() (int, error) { return 1, nil }
func (s *Store) GetAppliedMigrations() ([]model.AppliedMigration, error) {
return []model.AppliedMigration{}, nil
}
func (s *Store) TotalMasterDbConnections() int { return 1 }
func (s *Store) TotalReadDbConnections() int { return 1 }
func (s *Store) TotalSearchDbConnections() int { return 1 }
func (s *Store) TotalMasterDbConnections() int { return 1 }
func (s *Store) TotalReadDbConnections() int { return 1 }
func (s *Store) TotalSearchDbConnections() int { return 1 }
func (s *Store) GetCurrentSchemaVersion() string { return "" }
func (s *Store) CheckIntegrity() <-chan model.IntegrityCheckResult {
return make(chan model.IntegrityCheckResult)
}

Просмотреть файл

@@ -10616,6 +10616,10 @@ func (s *TimerLayer) DropAllTables() {
s.Store.DropAllTables()
}
func (s *TimerLayer) GetCurrentSchemaVersion() string {
return s.Store.GetCurrentSchemaVersion()
}
func (s *TimerLayer) LockToMaster() {
s.Store.LockToMaster()
}