BUGFIX: migration speedup

This commit is contained in:
Simon Martens
2025-02-13 12:01:10 +01:00
parent 096e29994b
commit ae041aa3bf

View File

@@ -1,6 +1,8 @@
package migrations package migrations
import ( import (
"sync"
"github.com/Theodor-Springmann-Stiftung/musenalm/dbmodels" "github.com/Theodor-Springmann-Stiftung/musenalm/dbmodels"
"github.com/Theodor-Springmann-Stiftung/musenalm/helpers/datatypes" "github.com/Theodor-Springmann-Stiftung/musenalm/helpers/datatypes"
"github.com/Theodor-Springmann-Stiftung/musenalm/migrations/seed" "github.com/Theodor-Springmann-Stiftung/musenalm/migrations/seed"
@@ -18,40 +20,61 @@ func init() {
adb.Reihen = xmlmodels.SanitizeReihen(adb.Reihen, adb.Relationen_Bände_Reihen) adb.Reihen = xmlmodels.SanitizeReihen(adb.Reihen, adb.Relationen_Bände_Reihen)
agents, err := seed.RecordsFromAkteure(app, adb.Akteure) var agentsmap map[string]*dbmodels.Agent
if err == nil { var placesmap map[string]*dbmodels.Place
for _, record := range agents { var seriesmap map[string]*dbmodels.Series
if err = app.Save(record); err != nil { var entriesmap map[string]*dbmodels.Entry
app.Logger().Error("Error saving record", "error", err, "record", record) var contentsmap map[string]*dbmodels.Content
}
}
} else {
panic(err)
}
places, err := seed.RecordsFromOrte(app, adb.Orte) wg := sync.WaitGroup{}
if err == nil { wg.Add(3)
for _, record := range places {
if err = app.Save(record); err != nil {
app.Logger().Error("Error saving record", "error", err, "record", record)
}
}
} else {
panic(err)
}
placesmap := datatypes.MakeMap(places, func(record *dbmodels.Place) string { return record.Name() }) go func() {
agents, err := seed.RecordsFromAkteure(app, adb.Akteure)
series, err := seed.RecordsFromReihentitel(app, adb.Reihen) if err == nil {
if err == nil { for _, record := range agents {
for _, record := range series { if err = app.Save(record); err != nil {
if err = app.Save(record); err != nil { app.Logger().Error("Error saving record", "error", err, "record", record)
app.Logger().Error("Error saving record", "error", err, "record", record) }
} }
} else {
panic(err)
} }
} else { agentsmap = datatypes.MakeMap(agents, func(record *dbmodels.Agent) string { return record.MusenalmID() })
panic(err) wg.Done()
} }()
go func() {
places, err := seed.RecordsFromOrte(app, adb.Orte)
if err == nil {
for _, record := range places {
if err = app.Save(record); err != nil {
app.Logger().Error("Error saving record", "error", err, "record", record)
}
}
} else {
panic(err)
}
placesmap = datatypes.MakeMap(places, func(record *dbmodels.Place) string { return record.Name() })
wg.Done()
}()
go func() {
series, err := seed.RecordsFromReihentitel(app, adb.Reihen)
if err == nil {
for _, record := range series {
if err = app.Save(record); err != nil {
app.Logger().Error("Error saving record", "error", err, "record", record)
}
}
} else {
panic(err)
}
seriesmap = datatypes.MakeMap(series, func(record *dbmodels.Series) string { return record.MusenalmID() })
wg.Done()
}()
wg.Wait()
entries, err := seed.RecordsFromBände(app, *adb, placesmap) entries, err := seed.RecordsFromBände(app, *adb, placesmap)
if err == nil { if err == nil {
@@ -64,62 +87,82 @@ func init() {
panic(err) panic(err)
} }
entriesmap := datatypes.MakeMap(entries, func(record *dbmodels.Entry) string { return record.MusenalmID() }) entriesmap = datatypes.MakeMap(entries, func(record *dbmodels.Entry) string { return record.MusenalmID() })
if records, err := seed.ItemsFromBändeAndBIBLIO(app, adb.Bände, adb.BIBLIO, entriesmap); err == nil { wg.Add(2)
for _, record := range records {
if err = app.Save(record); err != nil { go func() {
app.Logger().Error("Error saving record", "error", err, "record", record) if records, err := seed.ItemsFromBändeAndBIBLIO(app, adb.Bände, adb.BIBLIO, entriesmap); err == nil {
for _, record := range records {
if err = app.Save(record); err != nil {
app.Logger().Error("Error saving record", "error", err, "record", record)
}
} }
} else {
panic(err)
} }
} else { wg.Done()
panic(err) }()
}
contents, err := seed.RecordsFromInhalte(app, adb.Inhalte, entriesmap) go func() {
if err == nil { contents, err := seed.RecordsFromInhalte(app, adb.Inhalte, entriesmap)
for _, record := range contents { if err == nil {
if err = app.Save(record); err != nil { for _, record := range contents {
app.Logger().Error("Error saving record", "error", err, "record", record) if err = app.Save(record); err != nil {
app.Logger().Error("Error saving record", "error", err, "record", record)
}
} }
} else {
panic(err)
} }
} else { contentsmap = datatypes.MakeMap(contents, func(record *dbmodels.Content) string { return record.MusenalmID() })
panic(err) wg.Done()
} }()
seriesmap := datatypes.MakeMap(series, func(record *dbmodels.Series) string { return record.MusenalmID() }) wg.Wait()
agentsmap := datatypes.MakeMap(agents, func(record *dbmodels.Agent) string { return record.MusenalmID() })
contentsmap := datatypes.MakeMap(contents, func(record *dbmodels.Content) string { return record.MusenalmID() })
if records, err := seed.RecordsFromRelationBändeReihen(app, adb.Relationen_Bände_Reihen, seriesmap, entriesmap); err == nil { wg.Add(3)
for _, record := range records {
if err := app.Save(record); err != nil { go func() {
app.Logger().Error("Error saving record", "error", err, "record", record) if records, err := seed.RecordsFromRelationBändeReihen(app, adb.Relationen_Bände_Reihen, seriesmap, entriesmap); err == nil {
for _, record := range records {
if err := app.Save(record); err != nil {
app.Logger().Error("Error saving record", "error", err, "record", record)
}
} }
} else {
panic(err)
} }
} else { wg.Done()
panic(err) }()
}
if records, err := seed.RecordsFromRelationBändeAkteure(app, adb.Relationen_Bände_Akteure, entriesmap, agentsmap); err == nil { go func() {
for _, record := range records { if records, err := seed.RecordsFromRelationBändeAkteure(app, adb.Relationen_Bände_Akteure, entriesmap, agentsmap); err == nil {
if err := app.Save(record); err != nil { for _, record := range records {
app.Logger().Error("Error saving record", "error", err, "record", record) if err := app.Save(record); err != nil {
app.Logger().Error("Error saving record", "error", err, "record", record)
}
} }
} else {
panic(err)
} }
} else { wg.Done()
panic(err) }()
}
if records, err := seed.RecordsFromRelationInhalteAkteure(app, adb.Relationen_Inhalte_Akteure, contentsmap, agentsmap); err == nil { go func() {
for _, record := range records { if records, err := seed.RecordsFromRelationInhalteAkteure(app, adb.Relationen_Inhalte_Akteure, contentsmap, agentsmap); err == nil {
if err := app.Save(record); err != nil { for _, record := range records {
app.Logger().Error("Error saving record", "error", err, "record", record) if err := app.Save(record); err != nil {
app.Logger().Error("Error saving record", "error", err, "record", record)
}
} }
} else {
panic(err)
} }
} else { wg.Done()
panic(err) }()
}
wg.Wait()
return nil return nil
}, func(app core.App) error { }, func(app core.App) error {