forked from vitessio/vitess
-
Notifications
You must be signed in to change notification settings - Fork 0
/
split_strategy.go
67 lines (58 loc) · 2.15 KB
/
split_strategy.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// Copyright 2014, Google Inc. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package mysqlctl
import (
"flag"
"fmt"
"strings"
"github.com/youtube/vitess/go/vt/logutil"
)
// SplitStrategy is the configuration for a split clone.
type SplitStrategy struct {
// PopulateBlpCheckpoint will drive the population of the blp_checkpoint table
PopulateBlpCheckpoint bool
// DontStartBinlogPlayer will delay starting the binlog replication
DontStartBinlogPlayer bool
// SkipSetSourceShards will not set the source shards at the end of restore
SkipSetSourceShards bool
}
func NewSplitStrategy(logger logutil.Logger, argsStr string) (*SplitStrategy, error) {
var args []string
if argsStr != "" {
args = strings.Split(argsStr, " ")
}
flagSet := flag.NewFlagSet("strategy", flag.ContinueOnError)
flagSet.SetOutput(logutil.NewLoggerWriter(logger))
flagSet.Usage = func() {
logger.Printf("Strategy flag has the following options:\n")
flagSet.PrintDefaults()
}
populateBlpCheckpoint := flagSet.Bool("populate_blp_checkpoint", false, "populates the blp checkpoint table")
dontStartBinlogPlayer := flagSet.Bool("dont_start_binlog_player", false, "do not start the binlog player after restore is complete")
skipSetSourceShards := flagSet.Bool("skip_set_source_shards", false, "do not set the SourceShar field on destination shards")
if err := flagSet.Parse(args); err != nil {
return nil, fmt.Errorf("cannot parse strategy: %v", err)
}
if flagSet.NArg() > 0 {
return nil, fmt.Errorf("strategy doesn't have positional arguments")
}
return &SplitStrategy{
PopulateBlpCheckpoint: *populateBlpCheckpoint,
DontStartBinlogPlayer: *dontStartBinlogPlayer,
SkipSetSourceShards: *skipSetSourceShards,
}, nil
}
func (strategy *SplitStrategy) String() string {
var result []string
if strategy.PopulateBlpCheckpoint {
result = append(result, "-populate_blp_checkpoint")
}
if strategy.DontStartBinlogPlayer {
result = append(result, "-dont_start_binlog_player")
}
if strategy.SkipSetSourceShards {
result = append(result, "-skip_set_source_shards")
}
return strings.Join(result, " ")
}