(externalConfig string, importDatabases map[string]string)
| 63 | } |
| 64 | |
| 65 | func HandleBackupImport(externalConfig string, importDatabases map[string]string) { |
| 66 | ctx, cancel := context.WithCancel(context.Background()) |
| 67 | signalHandler := utility.NewSignalHandler(ctx, cancel, []os.Signal{syscall.SIGINT, syscall.SIGTERM}) |
| 68 | defer func() { _ = signalHandler.Close() }() |
| 69 | |
| 70 | st, err := internal.ConfigureStorage() |
| 71 | tracelog.ErrorLogger.FatalOnError(err) |
| 72 | folder := st.RootFolder() |
| 73 | |
| 74 | externalSt, err := internal.StorageFromConfig(externalConfig) |
| 75 | tracelog.ErrorLogger.FatalOnError(err) |
| 76 | externalFolder := externalSt.RootFolder() |
| 77 | |
| 78 | dbnames, databaseFiles, err := prepareBackupImportSpec(externalFolder, importDatabases) |
| 79 | tracelog.ErrorLogger.FatalOnError(err) |
| 80 | |
| 81 | lock, err := RunOrReuseProxy(ctx, cancel, folder) |
| 82 | tracelog.ErrorLogger.FatalOnError(err) |
| 83 | defer lock.Close() |
| 84 | |
| 85 | var backupName string |
| 86 | var sentinel *SentinelDto |
| 87 | backup, err := internal.GetBackupByName(internal.LatestString, utility.BaseBackupPath, folder) |
| 88 | tracelog.ErrorLogger.FatalfOnError("can't find latest backup: %v", err) |
| 89 | backupName = backup.Name |
| 90 | sentinel = new(SentinelDto) |
| 91 | err = backup.FetchSentinel(sentinel) |
| 92 | tracelog.ErrorLogger.FatalOnError(err) |
| 93 | |
| 94 | err = runParallel(func(i int) error { |
| 95 | return importSingleDatabaseBackup(ctx, backupName, dbnames[i], externalFolder, databaseFiles[dbnames[i]]) |
| 96 | }, len(dbnames), getDBConcurrency()) |
| 97 | tracelog.ErrorLogger.FatalfOnError("overall import failed: %v", err) |
| 98 | |
| 99 | sentinel.Databases = uniq(append(sentinel.Databases, dbnames...)) |
| 100 | uploader := internal.NewRegularUploader(nil, folder.GetSubFolder(utility.BaseBackupPath)) |
| 101 | tracelog.InfoLogger.Printf("uploading sentinel: %s", sentinel) |
| 102 | err = internal.UploadSentinel(uploader, sentinel, backupName) |
| 103 | tracelog.ErrorLogger.FatalfOnError("failed to save sentinel: %v", err) |
| 104 | |
| 105 | tracelog.InfoLogger.Printf("import finished") |
| 106 | } |
| 107 | |
| 108 | func importSingleDatabaseBackup(ctx context.Context, backupName string, dbname string, |
| 109 | externalFolder storage.Folder, backupFiles []storage.Object) error { |
no test coverage detected