6
"github.com/wal-g/wal-g/internal/databases/greenplum"
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"
16
backupPushShortDescription = "Makes backup and uploads it to storage"
18
permanentFlag = "permanent"
19
fullBackupFlag = "full"
20
addUserDataFlag = "add-user-data"
21
deltaFromUserDataFlag = "delta-from-user-data"
22
deltaFromNameFlag = "delta-from-name"
24
permanentShorthand = "p"
25
fullBackupShorthand = "f"
29
// backupPushCmd represents the backupPush command
30
backupPushCmd = &cobra.Command{
32
Short: backupPushShortDescription, // TODO : improve description
34
Run: func(cmd *cobra.Command, args []string) {
35
internal.ConfigureLimiters()
37
if deltaFromName == "" {
38
deltaFromName = viper.GetString(conf.DeltaFromNameSetting)
40
if deltaFromUserData == "" {
41
deltaFromUserData = viper.GetString(conf.DeltaFromUserDataSetting)
43
if userDataRaw == "" {
44
userDataRaw = viper.GetString(conf.SentinelUserDataSetting)
46
userData, err := internal.UnmarshalSentinelUserData(userDataRaw)
47
tracelog.ErrorLogger.FatalfOnError("Failed to unmarshal the provided UserData: %s", err)
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)
53
logsDir := viper.GetString(conf.GPLogsDirectory)
55
segPollInterval, err := conf.GetDurationSetting(conf.GPSegmentsPollInterval)
56
tracelog.ErrorLogger.FatalOnError(err)
58
segPollRetries := viper.GetInt(conf.GPSegmentsPollRetries)
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()
71
deltaFromUserData = ""
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)},
83
cmd.AddCommand(backupPushCmd)
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")