fix(cmd): only start temporary API server during migration if it's enabled (#10284)

This commit is contained in:
Tommy van der Vorst
2025-08-25 05:46:23 +00:00
committed by GitHub
parent 07f1320e00
commit 958f51ace6
2 changed files with 12 additions and 5 deletions
+5 -1
View File
@@ -479,7 +479,11 @@ func (c *serveCmd) syncthingMain() {
}) })
} }
if err := syncthing.TryMigrateDatabase(ctx, c.DBDeleteRetentionInterval, cfgWrapper.GUI().Address()); err != nil { var tempApiAddress string
if cfgWrapper.GUI().Enabled {
tempApiAddress = cfgWrapper.GUI().Address()
}
if err := syncthing.TryMigrateDatabase(ctx, c.DBDeleteRetentionInterval, tempApiAddress); err != nil {
slog.Error("Failed to migrate old-style database", slogutil.Error(err)) slog.Error("Failed to migrate old-style database", slogutil.Error(err))
os.Exit(1) os.Exit(1)
} }
+7 -4
View File
@@ -158,6 +158,7 @@ func OpenDatabase(path string, deleteRetention time.Duration) (db.DB, error) {
} }
// Attempts migration of the old (LevelDB-based) database type to the new (SQLite-based) type // Attempts migration of the old (LevelDB-based) database type to the new (SQLite-based) type
// This will attempt to provide a temporary API server during the migration, if `apiAddr` is not empty.
func TryMigrateDatabase(ctx context.Context, deleteRetention time.Duration, apiAddr string) error { func TryMigrateDatabase(ctx context.Context, deleteRetention time.Duration, apiAddr string) error {
oldDBDir := locations.Get(locations.LegacyDatabase) oldDBDir := locations.Get(locations.LegacyDatabase)
if _, err := os.Lstat(oldDBDir); err != nil { if _, err := os.Lstat(oldDBDir); err != nil {
@@ -173,10 +174,12 @@ func TryMigrateDatabase(ctx context.Context, deleteRetention time.Duration, apiA
defer be.Close() defer be.Close()
// Start a temporary API server during the migration // Start a temporary API server during the migration
api := migratingAPI{addr: apiAddr} if apiAddr != "" {
apiCtx, cancel := context.WithCancel(ctx) api := migratingAPI{addr: apiAddr}
defer cancel() apiCtx, cancel := context.WithCancel(ctx)
go api.Serve(apiCtx) defer cancel()
go api.Serve(apiCtx)
}
sdb, err := sqlite.OpenForMigration(locations.Get(locations.Database)) sdb, err := sqlite.OpenForMigration(locations.Get(locations.Database))
if err != nil { if err != nil {