main.go raw
1 package main
2
3 import (
4 "flag"
5 "os"
6 "strconv"
7
8 "github.com/sirupsen/logrus"
9 "gorm.io/gorm"
10
11 "github.com/getAlby/hub/db"
12 "github.com/getAlby/hub/logger"
13 )
14
15 func main() {
16 var fromDSN, toDSN string
17
18 logger.Init(strconv.Itoa(int(logrus.DebugLevel)))
19
20 flag.StringVar(&fromDSN, "from", "", "source DSN")
21 flag.StringVar(&toDSN, "to", "", "destination DSN")
22
23 flag.Parse()
24
25 if fromDSN == "" || toDSN == "" {
26 flag.Usage()
27 logger.Logger.Error("missing DSN")
28 os.Exit(1)
29 }
30
31 stopDB := func(d *gorm.DB) {
32 if err := db.Stop(d); err != nil {
33 logger.Logger.WithError(err).Error("failed to close database")
34 }
35 }
36
37 logger.Logger.Info("opening source DB...")
38 fromDB, err := db.NewDB(fromDSN, false)
39 if err != nil {
40 logger.Logger.WithError(err).Error("failed to open source database")
41 os.Exit(1)
42 }
43 defer stopDB(fromDB)
44
45 logger.Logger.Info("opening destination DB...")
46 toDB, err := db.NewDB(toDSN, false)
47 if err != nil {
48 logger.Logger.WithError(err).Error("failed to open destination database")
49 os.Exit(1)
50 }
51 defer stopDB(toDB)
52
53 // When migrating to Postgres (e.g. a cloud deployment) the node data must
54 // be stored in VSS, since only the database is migrated by this tool.
55 if toDB.Dialector.Name() == "postgres" {
56 var vssConfig db.UserConfig
57 result := fromDB.Where("key = ?", "LdkVssEnabled").First(&vssConfig)
58 if result.Error != nil {
59 if result.Error == gorm.ErrRecordNotFound {
60 logger.Logger.Error("LdkVssEnabled config not found in source DB. Migration will not proceed.")
61 } else {
62 logger.Logger.WithError(result.Error).Error("failed to query LdkVssEnabled config from source DB")
63 }
64 os.Exit(1)
65 }
66
67 if vssConfig.Value != "true" {
68 logger.Logger.Error("VSS is not enabled in the source DB (LdkVssEnabled is not 'true'). Migration will not proceed.")
69 os.Exit(1)
70 }
71 logger.Logger.Info("LdkVssEnabled check passed.")
72 }
73
74 logger.Logger.Info("migrating...")
75 err = db.MigrateDB(fromDB, toDB)
76 if err != nil {
77 logger.Logger.WithError(err).Error("failed to migrate database")
78 os.Exit(1)
79 }
80
81 logger.Logger.Info("migration complete")
82 }
83