(backupName string, dbnames []string, fromnames []string, noRecovery bool)
| 15 | ) |
| 16 | |
| 17 | func HandleBackupRestore(backupName string, dbnames []string, fromnames []string, noRecovery bool) { |
| 18 | ctx, cancel := context.WithCancel(context.Background()) |
| 19 | signalHandler := utility.NewSignalHandler(ctx, cancel, []os.Signal{syscall.SIGINT, syscall.SIGTERM}) |
| 20 | defer func() { _ = signalHandler.Close() }() |
| 21 | |
| 22 | storage, err := internal.ConfigureStorage() |
| 23 | tracelog.ErrorLogger.FatalOnError(err) |
| 24 | |
| 25 | folder := storage.RootFolder() |
| 26 | |
| 27 | backup, err := internal.GetBackupByName(backupName, utility.BaseBackupPath, folder) |
| 28 | tracelog.ErrorLogger.FatalOnError(err) |
| 29 | |
| 30 | sentinel := new(SentinelDto) |
| 31 | err = backup.FetchSentinel(sentinel) |
| 32 | tracelog.ErrorLogger.FatalOnError(err) |
| 33 | |
| 34 | db, err := getSQLServerConnection() |
| 35 | tracelog.ErrorLogger.FatalfOnError("failed to connect to SQLServer: %v", err) |
| 36 | |
| 37 | dbnames, fromnames, err = getDatabasesToRestore(sentinel, dbnames, fromnames) |
| 38 | tracelog.ErrorLogger.FatalfOnError("failed to list databases to restore: %v", err) |
| 39 | |
| 40 | lock, err := RunOrReuseProxy(ctx, cancel, folder) |
| 41 | tracelog.ErrorLogger.FatalOnError(err) |
| 42 | defer lock.Close() |
| 43 | |
| 44 | backupName = backup.Name |
| 45 | |
| 46 | err = runParallel(func(i int) error { |
| 47 | dbname := dbnames[i] |
| 48 | fromname := fromnames[i] |
| 49 | err := restoreSingleDatabase(ctx, db, folder, backupName, dbname, fromname) |
| 50 | if err != nil { |
| 51 | return err |
| 52 | } |
| 53 | if !noRecovery { |
| 54 | return recoverSingleDatabase(ctx, db, dbname) |
| 55 | } |
| 56 | return nil |
| 57 | }, len(dbnames), getDBConcurrency()) |
| 58 | tracelog.ErrorLogger.FatalfOnError("overall restore failed: %v", err) |
| 59 | |
| 60 | tracelog.InfoLogger.Printf("restore finished") |
| 61 | } |
| 62 | |
| 63 | func restoreSingleDatabase(ctx context.Context, |
| 64 | db *sql.DB, |
no test coverage detected