wal-g

Форк
0
/
backup_push.go 
95 строк · 3.1 Кб
1
package gp
2

3
import (
4
	"strconv"
5

6
	"github.com/wal-g/wal-g/internal/databases/greenplum"
7

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

15
const (
16
	backupPushShortDescription = "Makes backup and uploads it to storage"
17

18
	permanentFlag         = "permanent"
19
	fullBackupFlag        = "full"
20
	addUserDataFlag       = "add-user-data"
21
	deltaFromUserDataFlag = "delta-from-user-data"
22
	deltaFromNameFlag     = "delta-from-name"
23

24
	permanentShorthand  = "p"
25
	fullBackupShorthand = "f"
26
)
27

28
var (
29
	// backupPushCmd represents the backupPush command
30
	backupPushCmd = &cobra.Command{
31
		Use:   "backup-push",
32
		Short: backupPushShortDescription, // TODO : improve description
33
		Args:  cobra.NoArgs,
34
		Run: func(cmd *cobra.Command, args []string) {
35
			internal.ConfigureLimiters()
36

37
			if deltaFromName == "" {
38
				deltaFromName = viper.GetString(conf.DeltaFromNameSetting)
39
			}
40
			if deltaFromUserData == "" {
41
				deltaFromUserData = viper.GetString(conf.DeltaFromUserDataSetting)
42
			}
43
			if userDataRaw == "" {
44
				userDataRaw = viper.GetString(conf.SentinelUserDataSetting)
45
			}
46
			userData, err := internal.UnmarshalSentinelUserData(userDataRaw)
47
			tracelog.ErrorLogger.FatalfOnError("Failed to unmarshal the provided UserData: %s", err)
48

49
			deltaBaseSelector, err := internal.NewDeltaBaseSelector(
50
				deltaFromName, deltaFromUserData, greenplum.NewGenericMetaFetcher())
51
			tracelog.ErrorLogger.FatalfOnError("Failed to find the base for a delta backup: %s", err)
52

53
			logsDir := viper.GetString(conf.GPLogsDirectory)
54

55
			segPollInterval, err := conf.GetDurationSetting(conf.GPSegmentsPollInterval)
56
			tracelog.ErrorLogger.FatalOnError(err)
57

58
			segPollRetries := viper.GetInt(conf.GPSegmentsPollRetries)
59

60
			arguments := greenplum.NewBackupArguments(permanent, fullBackup, userData, prepareSegmentFwdArgs(), logsDir,
61
				segPollInterval, segPollRetries, deltaBaseSelector)
62
			backupHandler, err := greenplum.NewBackupHandler(arguments)
63
			tracelog.ErrorLogger.FatalOnError(err)
64
			backupHandler.HandleBackupPush()
65
		},
66
	}
67
	permanent   = false
68
	userDataRaw = ""
69

70
	deltaFromName     = ""
71
	deltaFromUserData = ""
72
	fullBackup        = false
73
)
74

75
// prepare arguments that are going to be forwarded to segments
76
func prepareSegmentFwdArgs() []greenplum.SegmentFwdArg {
77
	return []greenplum.SegmentFwdArg{
78
		{Name: permanentFlag, Value: strconv.FormatBool(permanent)},
79
	}
80
}
81

82
func init() {
83
	cmd.AddCommand(backupPushCmd)
84

85
	backupPushCmd.Flags().BoolVarP(&permanent, permanentFlag, permanentShorthand,
86
		false, "Pushes permanent backup")
87
	backupPushCmd.Flags().BoolVarP(&fullBackup, fullBackupFlag, fullBackupShorthand,
88
		false, "Make full backup-push")
89
	backupPushCmd.Flags().StringVar(&userDataRaw, addUserDataFlag,
90
		"", "Write the provided user data to the backup sentinel and metadata files.")
91
	backupPushCmd.Flags().StringVar(&deltaFromName, deltaFromNameFlag,
92
		"", "Select the backup specified by name as the target for the delta backup")
93
	backupPushCmd.Flags().StringVar(&deltaFromUserData, deltaFromUserDataFlag,
94
		"", "Select the backup specified by UserData as the target for the delta backup")
95
}
96

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

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

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

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