MCPcopy
hub / github.com/wal-g/wal-g / HandleBackupImport

Function HandleBackupImport

internal/databases/sqlserver/backup_import_handler.go:65–106  ·  view source on GitHub ↗
(externalConfig string, importDatabases map[string]string)

Source from the content-addressed store, hash-verified

63}
64
65func 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
108func importSingleDatabaseBackup(ctx context.Context, backupName string, dbname string,
109 externalFolder storage.Folder, backupFiles []storage.Object) error {

Callers 1

backup_import.goFile · 0.92

Calls 15

CloseMethod · 0.95
NewSignalHandlerFunction · 0.92
ConfigureStorageFunction · 0.92
StorageFromConfigFunction · 0.92
GetBackupByNameFunction · 0.92
NewRegularUploaderFunction · 0.92
UploadSentinelFunction · 0.92
prepareBackupImportSpecFunction · 0.85
RunOrReuseProxyFunction · 0.85
runParallelFunction · 0.85
getDBConcurrencyFunction · 0.85

Tested by

no test coverage detected