mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-01 03:03:10 -06:00
Add checks for specific migrations
This commit is contained in:
parent
8dc71378d1
commit
673e0f601b
|
|
@ -1,3 +1,17 @@
|
||||||
|
// Copyright 2022 The Matrix.org Foundation C.I.C.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
package sqlutil
|
package sqlutil
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
@ -92,7 +106,7 @@ func (m *Migrator) Up(ctx context.Context) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// executedMigrations returns a map with already executed migrations
|
// ExecutedMigrations returns a map with already executed migrations
|
||||||
func (m *Migrator) ExecutedMigrations(ctx context.Context) (map[string]bool, error) {
|
func (m *Migrator) ExecutedMigrations(ctx context.Context) (map[string]bool, error) {
|
||||||
result := make(map[string]bool)
|
result := make(map[string]bool)
|
||||||
_, err := m.db.ExecContext(ctx, "CREATE TABLE IF NOT EXISTS db_migrations ( version TEXT, time TEXT );")
|
_, err := m.db.ExecContext(ctx, "CREATE TABLE IF NOT EXISTS db_migrations ( version TEXT, time TEXT );")
|
||||||
|
|
|
||||||
|
|
@ -60,13 +60,21 @@ func NewPostgresKeyChangesTable(db *sql.DB) (tables.KeyChanges, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return s, err
|
return s, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Remove when we are sure we are not having goose artifacts in the db
|
||||||
|
// This forces an error, which indicates the migration is already applied, since the
|
||||||
|
// column partition was removed from the table
|
||||||
|
var count int
|
||||||
|
err = db.QueryRow("SELECT partition FROM keyserver_key_changes LIMIT 1;").Scan(&count)
|
||||||
|
if err == nil {
|
||||||
m := sqlutil.NewMigrator(db)
|
m := sqlutil.NewMigrator(db)
|
||||||
m.AddMigration(sqlutil.Migration{
|
m.AddMigration(sqlutil.Migration{
|
||||||
Version: "refactor key changes",
|
Version: "refactor key changes",
|
||||||
Up: deltas.UpRefactorKeyChanges,
|
Up: deltas.UpRefactorKeyChanges,
|
||||||
})
|
})
|
||||||
err = m.Up(context.Background())
|
return s, m.Up(context.Background())
|
||||||
return s, err
|
}
|
||||||
|
return s, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *keyChangesStatements) Prepare() (err error) {
|
func (s *keyChangesStatements) Prepare() (err error) {
|
||||||
|
|
|
||||||
|
|
@ -58,13 +58,21 @@ func NewSqliteKeyChangesTable(db *sql.DB) (tables.KeyChanges, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return s, err
|
return s, err
|
||||||
}
|
}
|
||||||
|
// TODO: Remove when we are sure we are not having goose artifacts in the db
|
||||||
|
// This forces an error, which indicates the migration is already applied, since the
|
||||||
|
// column partition was removed from the table
|
||||||
|
var count int
|
||||||
|
err = db.QueryRow("SELECT partition FROM keyserver_key_changes LIMIT 1;").Scan(&count)
|
||||||
|
if err == nil {
|
||||||
m := sqlutil.NewMigrator(db)
|
m := sqlutil.NewMigrator(db)
|
||||||
m.AddMigration(sqlutil.Migration{
|
m.AddMigration(sqlutil.Migration{
|
||||||
Version: "refactor key changes",
|
Version: "refactor key changes",
|
||||||
Up: deltas.UpRefactorKeyChanges,
|
Up: deltas.UpRefactorKeyChanges,
|
||||||
})
|
})
|
||||||
err = m.Up(context.Background())
|
return s, m.Up(context.Background())
|
||||||
return s, err
|
}
|
||||||
|
|
||||||
|
return s, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *keyChangesStatements) Prepare() (err error) {
|
func (s *keyChangesStatements) Prepare() (err error) {
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
|
||||||
|
|
||||||
// Import the postgres database driver.
|
// Import the postgres database driver.
|
||||||
_ "github.com/lib/pq"
|
_ "github.com/lib/pq"
|
||||||
|
|
@ -52,15 +51,11 @@ func Open(dbProperties *config.DatabaseOptions, cache caching.RoomServerCaches)
|
||||||
// Special case, since this migration uses several tables, so it needs to
|
// Special case, since this migration uses several tables, so it needs to
|
||||||
// be sure that all tables are created first.
|
// be sure that all tables are created first.
|
||||||
// TODO: Remove when we are sure we are not having goose artifacts in the db
|
// TODO: Remove when we are sure we are not having goose artifacts in the db
|
||||||
row := db.QueryRow("SELECT COUNT(*) FROM goose_db_version WHERE version_id = '2021041615092700';")
|
// This forces an error, which indicates the migration is already applied, since the
|
||||||
var gooseCount int
|
// column event_nid was removed from the table
|
||||||
if err := row.Scan(&gooseCount); err != nil {
|
var count int
|
||||||
if !strings.Contains(err.Error(), "does not exist") {
|
err = db.QueryRow("SELECT event_nid FROM roomserver_state_block LIMIT 1;").Scan(&count)
|
||||||
return nil, fmt.Errorf("unable to get goose_db_version: %w", err)
|
if err == nil {
|
||||||
}
|
|
||||||
}
|
|
||||||
// Migration not yet applied
|
|
||||||
if gooseCount == 0 {
|
|
||||||
m := sqlutil.NewMigrator(db)
|
m := sqlutil.NewMigrator(db)
|
||||||
m.AddMigrations([]sqlutil.Migration{
|
m.AddMigrations([]sqlutil.Migration{
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,6 @@ package sqlite3
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"fmt"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/matrix-org/dendrite/internal/caching"
|
"github.com/matrix-org/dendrite/internal/caching"
|
||||||
"github.com/matrix-org/dendrite/internal/sqlutil"
|
"github.com/matrix-org/dendrite/internal/sqlutil"
|
||||||
|
|
@ -61,15 +59,11 @@ func Open(dbProperties *config.DatabaseOptions, cache caching.RoomServerCaches)
|
||||||
// Special case, since this migration uses several tables, so it needs to
|
// Special case, since this migration uses several tables, so it needs to
|
||||||
// be sure that all tables are created first.
|
// be sure that all tables are created first.
|
||||||
// TODO: Remove when we are sure we are not having goose artifacts in the db
|
// TODO: Remove when we are sure we are not having goose artifacts in the db
|
||||||
row := db.QueryRow("SELECT COUNT(*) FROM goose_db_version WHERE version_id = '2021041615092700';")
|
// This forces an error, which indicates the migration is already applied, since the
|
||||||
var gooseCount int
|
// column event_nid was removed from the table
|
||||||
if err := row.Scan(&gooseCount); err != nil {
|
var count int
|
||||||
if !strings.Contains(err.Error(), "no such table") {
|
err = db.QueryRow("SELECT event_nid FROM roomserver_state_block LIMIT 1;").Scan(&count)
|
||||||
return nil, fmt.Errorf("unable to get goose_db_version: %w", err)
|
if err == nil {
|
||||||
}
|
|
||||||
}
|
|
||||||
// Migration not yet applied
|
|
||||||
if gooseCount == 0 {
|
|
||||||
m := sqlutil.NewMigrator(db)
|
m := sqlutil.NewMigrator(db)
|
||||||
m.AddMigrations([]sqlutil.Migration{
|
m.AddMigrations([]sqlutil.Migration{
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue