فهرست منبع

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

Tommy van der Vorst 2 ماه پیش
والد
کامیت
958f51ace6
2فایلهای تغییر یافته به همراه12 افزوده شده و 5 حذف شده
  1. 5 1
      cmd/syncthing/main.go
  2. 7 4
      lib/syncthing/utils.go

+ 5 - 1
cmd/syncthing/main.go

@@ -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
lib/syncthing/utils.go

@@ -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}
-	apiCtx, cancel := context.WithCancel(ctx)
-	defer cancel()
-	go api.Serve(apiCtx)
+	if apiAddr != "" {
+		api := migratingAPI{addr: apiAddr}
+		apiCtx, cancel := context.WithCancel(ctx)
+		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 {