wal-g

Форк
0
/
backup_fetch_segment.go 
96 строк · 3.5 Кб
1
package gp
2

3
import (
4
	"fmt"
5

6
	"github.com/spf13/cobra"
7
	"github.com/spf13/viper"
8
	"github.com/wal-g/tracelog"
9
	"github.com/wal-g/wal-g/internal"
10
	conf "github.com/wal-g/wal-g/internal/config"
11
	"github.com/wal-g/wal-g/internal/databases/greenplum"
12
	"github.com/wal-g/wal-g/internal/databases/postgres"
13
)
14

15
const (
16
	segBackupFetchShortDescription = "Fetches a segment backup from storage"
17
	maskFlagDescription            = `Fetches only files which path relative to destination_directory
18
matches given shell file pattern.
19
For information about pattern syntax view: https://golang.org/pkg/path/filepath/#Match`
20
	restoreSpecDescription = "Path to file containing tablespace restore specification"
21
)
22

23
var fileMask string
24
var restoreSpec string
25
var targetUserData string
26

27
// segBackupFetchCmd is a subcommand to fetch a backup of a single segment.
28
// It is called remotely by a backup-fetch command from the master host
29
var segBackupFetchCmd = &cobra.Command{
30
	Use:   "seg-backup-fetch destination_directory [backup_name | --target-user-data <data>] --content-id=[content_id]",
31
	Short: segBackupFetchShortDescription, // TODO : improve description
32
	Args:  cobra.RangeArgs(1, 2),
33
	Run: func(cmd *cobra.Command, args []string) {
34
		internal.ConfigureLimiters()
35

36
		if targetUserData == "" {
37
			targetUserData = viper.GetString(conf.FetchTargetUserDataSetting)
38
		}
39

40
		greenplum.SetSegmentStoragePrefix(contentID)
41

42
		targetBackupSelector, err := createTargetFetchSegBackupSelector(cmd, args, fetchTargetUserData)
43
		tracelog.ErrorLogger.FatalOnError(err)
44

45
		storage, err := internal.ConfigureStorage()
46
		tracelog.ErrorLogger.FatalOnError(err)
47

48
		reverseDeltaUnpack := viper.GetBool(conf.UseReverseUnpackSetting)
49
		skipRedundantTars := viper.GetBool(conf.SkipRedundantTarsSetting)
50

51
		if reverseDeltaUnpack || skipRedundantTars {
52
			tracelog.ErrorLogger.Fatalf("%s and %s settings are not supported yet",
53
				conf.UseReverseUnpackSetting, conf.SkipRedundantTarsSetting)
54
		}
55

56
		var extractProv postgres.ExtractProvider
57

58
		if partialRestoreArgs != nil {
59
			extractProv = greenplum.NewExtractProviderDBSpec(partialRestoreArgs)
60
		} else {
61
			extractProv = greenplum.ExtractProviderImpl{}
62
		}
63

64
		pgFetcher := postgres.GetFetcherOld(args[0], fileMask, restoreSpec, extractProv)
65
		internal.HandleBackupFetch(storage.RootFolder(), targetBackupSelector, pgFetcher)
66
	},
67
}
68

69
// create the BackupSelector to select the segment backup to fetch
70
func createTargetFetchSegBackupSelector(cmd *cobra.Command,
71
	args []string, targetUserData string) (internal.BackupSelector, error) {
72
	targetName := ""
73
	if len(args) >= 2 {
74
		targetName = args[1]
75
	}
76

77
	backupSelector, err := internal.NewTargetBackupSelector(targetUserData, targetName, postgres.NewGenericMetaFetcher())
78
	if err != nil {
79
		fmt.Println(cmd.UsageString())
80
		return nil, err
81
	}
82
	return backupSelector, nil
83
}
84

85
func init() {
86
	segBackupFetchCmd.Flags().StringVar(&fileMask, "mask", "", maskFlagDescription)
87
	segBackupFetchCmd.Flags().StringVar(&restoreSpec, "restore-spec", "", restoreSpecDescription)
88
	segBackupFetchCmd.Flags().StringVar(&fetchTargetUserData, "target-user-data",
89
		"", targetUserDataDescription)
90
	segBackupFetchCmd.PersistentFlags().IntVar(&contentID, "content-id", 0, "segment content ID")
91
	_ = segBackupFetchCmd.MarkFlagRequired("content-id")
92
	segBackupFetchCmd.Flags().StringSliceVar(&partialRestoreArgs, "restore-only", nil, restoreOnlyDescription)
93
	// Since this is a utility command called by backup-fetch, it should not be exposed to the end user.
94
	segBackupFetchCmd.Hidden = true
95
	cmd.AddCommand(segBackupFetchCmd)
96
}
97

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.