config

package
v0.0.0-...-dec6591 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 9, 2025 License: Apache-2.0 Imports: 38 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// LocalFilePerm is the permission for local files
	LocalFilePerm os.FileMode = 0o644

	// LogFileName is the filename of the log
	LogFileName = "sync_diff.log"

	// UnifiedTimeZone is the time zone
	UnifiedTimeZone string = "+0:00"
)

Variables

This section is empty.

Functions

func Decrypt

func Decrypt(ciphertextB64 string) (string, error)

Decrypt tries to decrypt base64 encoded ciphertext to plaintext.

func DecryptOrPlaintext

func DecryptOrPlaintext(ciphertextB64 string) string

DecryptOrPlaintext tries to decrypt base64 encoded ciphertext to plaintext or return plaintext.

func ExportTemplateConfig

func ExportTemplateConfig(configType string) error

ExportTemplateConfig print the configType

Types

type Config

type Config struct {
	*flag.FlagSet `json:"-"`

	// log level
	LogLevel string `toml:"-" json:"-"`
	// how many goroutines are created to check data
	CheckThreadCount int `toml:"check-thread-count" json:"check-thread-count"`
	// how many goroutines are created to split chunk. A goroutine splits one table at a time.
	SplitThreadCount int `toml:"-" json:"split-thread-count"`
	// set true if want to compare rows
	// set false won't compare rows.
	ExportFixSQL bool `toml:"export-fix-sql" json:"export-fix-sql"`
	// only check table struct without table data.
	CheckStructOnly bool `toml:"check-struct-only" json:"check-struct-only"`
	// experimental feature: only check table data without table struct
	CheckDataOnly bool `toml:"check-data-only" json:"-"`
	// skip validation for tables that don't exist upstream or downstream
	SkipNonExistingTable bool `toml:"skip-non-existing-table" json:"-"`
	// DMAddr is dm-master's address, the format should like "http://127.0.0.1:8261"
	DMAddr string `toml:"dm-addr" json:"dm-addr"`
	// DMTask string `toml:"dm-task" json:"dm-task"`
	DMTask string `toml:"dm-task" json:"dm-task"`

	DataSources map[string]*DataSource `toml:"data-sources" json:"data-sources"`

	Routes map[string]*router.TableRule `toml:"routes" json:"routes"`

	TableConfigs map[string]*TableConfig `toml:"table-configs" json:"table-configs"`

	Task TaskConfig `toml:"task" json:"task"`
	// config file
	ConfigFile string

	// export a template config file
	Template string `toml:"-" json:"-"`

	// print version if set true
	PrintVersion bool
}

Config is the configuration.

func NewConfig

func NewConfig() *Config

NewConfig creates a new config.

func (*Config) CheckConfig

func (c *Config) CheckConfig() bool

CheckConfig check whether the config is vaild

func (*Config) Init

func (c *Config) Init() (err error)

Init initialize the config

func (*Config) Parse

func (c *Config) Parse(arguments []string) error

Parse parses flag definitions from the argument list.

func (*Config) String

func (c *Config) String() string

type DBConfig

type DBConfig struct {
	Host     string `toml:"host" json:"host" yaml:"host"`
	Port     int    `toml:"port" json:"port" yaml:"port"`
	User     string `toml:"user" json:"user" yaml:"user"`
	Password string `toml:"password" json:"-" yaml:"password"` // omit it for privacy
	// deprecated, mysql driver could automatically fetch this value
	MaxAllowedPacket *int              `toml:"max-allowed-packet" json:"max-allowed-packet" yaml:"max-allowed-packet"`
	Session          map[string]string `toml:"session" json:"session" yaml:"session"`

	// security config
	Security *security.Security `toml:"security" json:"security" yaml:"security"`
}

DBConfig is the DB configuration.

type DataSource

type DataSource struct {
	Host     string             `toml:"host" json:"host"`
	Port     int                `toml:"port" json:"port"`
	User     string             `toml:"user" json:"user"`
	Password utils.SecretString `toml:"password" json:"password"`
	SQLMode  string             `toml:"sql-mode" json:"sql-mode"`
	Snapshot string             `toml:"snapshot" json:"snapshot"`

	Security *Security `toml:"security" json:"security"`

	RouteRules     []string `toml:"route-rules" json:"route-rules"`
	Router         *router.Table
	RouteTargetSet map[string]struct{} `json:"-"`

	Conn *sql.DB
}

DataSource represents the Source Config.

func (*DataSource) IsAutoSnapshot

func (d *DataSource) IsAutoSnapshot() bool

IsAutoSnapshot returns true if the tidb_snapshot is expected to automatically be set from the syncpoint from the target TiDB instance.

func (*DataSource) RegisterTLS

func (d *DataSource) RegisterTLS() error

RegisterTLS register TLS config for driver

func (*DataSource) SetSnapshot

func (d *DataSource) SetSnapshot(newSnapshot string)

SetSnapshot changes the snapshot in configuration. This is typically used with the auto-snapshot feature.

func (*DataSource) ToDBConfig

func (d *DataSource) ToDBConfig() *dbutil.DBConfig

ToDBConfig get the current config from data source

func (*DataSource) ToDriverConfig

func (d *DataSource) ToDriverConfig() *mysql.Config

ToDriverConfig get the driver config

type Security

type Security struct {
	TLSName string `json:"tls-name"`

	CAPath   string `toml:"ca-path" json:"ca-path"`
	CertPath string `toml:"cert-path" json:"cert-path"`
	KeyPath  string `toml:"key-path" json:"key-path"`

	// raw content
	CABytes   string `toml:"ca-bytes" json:"ca-bytes"`
	CertBytes string `toml:"cert-bytes" json:"cert-bytes"`
	KeyBytes  string `toml:"key-bytes" json:"key-bytes"`
}

Security is the wrapper for TLS Security

type SubTaskConfig

type SubTaskConfig struct {
	// when in sharding, multi dm-workers do one task
	IsSharding                bool   `toml:"is-sharding" json:"is-sharding"`
	ShardMode                 string `toml:"shard-mode" json:"shard-mode"`
	StrictOptimisticShardMode bool   `toml:"strict-optimistic-shard-mode" json:"strict-optimistic-shard-mode"`
	OnlineDDL                 bool   `toml:"online-ddl" json:"online-ddl"`

	// pt/gh-ost name rule, support regex
	ShadowTableRules []string `yaml:"shadow-table-rules" toml:"shadow-table-rules" json:"shadow-table-rules"`
	TrashTableRules  []string `yaml:"trash-table-rules" toml:"trash-table-rules" json:"trash-table-rules"`

	// deprecated
	OnlineDDLScheme string `toml:"online-ddl-scheme" json:"online-ddl-scheme"`

	// handle schema/table name mode, and only for schema/table name/pattern
	// if case insensitive, we would convert schema/table name/pattern to lower case
	CaseSensitive bool `toml:"case-sensitive" json:"case-sensitive"`

	// default "loose" handle create sql by original sql, will not add default collation as upstream
	// "strict" will add default collation as upstream, and downstream will occur error when downstream don't support
	CollationCompatible string `yaml:"collation_compatible" toml:"collation_compatible" json:"collation_compatible"`

	Name string `toml:"name" json:"name"`
	Mode string `toml:"mode" json:"mode"`
	//  treat it as hidden configuration
	IgnoreCheckingItems []string `toml:"ignore-checking-items" json:"ignore-checking-items"`
	// it represents a MySQL/MariaDB instance or a replica group
	SourceID   string `toml:"source-id" json:"source-id"`
	ServerID   uint32 `toml:"server-id" json:"server-id"`
	Flavor     string `toml:"flavor" json:"flavor"`
	MetaSchema string `toml:"meta-schema" json:"meta-schema"`
	// deprecated
	HeartbeatUpdateInterval int `toml:"heartbeat-update-interval" json:"heartbeat-update-interval"`
	// deprecated
	HeartbeatReportInterval int `toml:"heartbeat-report-interval" json:"heartbeat-report-interval"`
	// deprecated
	EnableHeartbeat bool   `toml:"enable-heartbeat" json:"enable-heartbeat"`
	Timezone        string `toml:"timezone" json:"timezone"`

	// RelayDir get value from dm-worker config
	RelayDir string `toml:"relay-dir" json:"relay-dir"`

	// UseRelay get value from dm-worker's relayEnabled
	UseRelay bool     `toml:"use-relay" json:"use-relay"`
	From     DBConfig `toml:"from" json:"from"`
	To       DBConfig `toml:"to" json:"to"`

	RouteRules []*router.TableRule `toml:"route-rules" json:"route-rules"`
	// FilterRules []*bf.BinlogEventRule `toml:"filter-rules" json:"filter-rules"`
	// deprecated
	ColumnMappingRules []*column.Rule `toml:"mapping-rule" json:"mapping-rule"`

	// black-white-list is deprecated, use block-allow-list instead
	BWList *filter.Rules `toml:"black-white-list" json:"black-white-list"`
	BAList *filter.Rules `toml:"block-allow-list" json:"block-allow-list"`

	// compatible with standalone dm unit
	LogLevel  string `toml:"log-level" json:"log-level"`
	LogFile   string `toml:"log-file" json:"log-file"`
	LogFormat string `toml:"log-format" json:"log-format"`
	LogRotate string `toml:"log-rotate" json:"log-rotate"`

	PprofAddr  string `toml:"pprof-addr" json:"pprof-addr"`
	StatusAddr string `toml:"status-addr" json:"status-addr"`

	ConfigFile string `toml:"-" json:"config-file"`

	CleanDumpFile bool `toml:"clean-dump-file" json:"clean-dump-file"`

	// deprecated, will auto discover SQL mode
	EnableANSIQuotes bool `toml:"ansi-quotes" json:"ansi-quotes"`

	// which DM worker is running the subtask, this will be injected when the real worker starts running the subtask(StartSubTask).
	WorkerName string `toml:"-" json:"-"`
	// task experimental configs
	Experimental struct {
		AsyncCheckpointFlush bool `yaml:"async-checkpoint-flush" toml:"async-checkpoint-flush" json:"async-checkpoint-flush"`
	} `yaml:"experimental" toml:"experimental" json:"experimental"`
}

SubTaskConfig is the configuration for SubTask.

func (*SubTaskConfig) Decode

func (c *SubTaskConfig) Decode(data string, verifyDecryptPassword bool) error

Decode loads config from file data.

type TableConfig

type TableConfig struct {
	// table's filter to tell us which table should adapt to this config.
	TargetTables []string `toml:"target-tables" json:"target-tables"`
	// Internally used to indicate which specified table in target is using this config.
	Schema string
	Table  string
	// Internally used to distinguish different config.
	ConfigIndex int
	// Internally used to valid config.
	HasMatched bool

	// columns be ignored, will not check this column's data
	IgnoreColumns []string `toml:"ignore-columns"`
	// field should be the primary key, unique key or field with index
	Fields []string `toml:"index-fields"`
	// select range, for example: "age > 10 AND age < 20"
	Range string `toml:"range"`

	TargetTableInfo *model.TableInfo

	// collation config in mysql/tidb
	Collation string `toml:"collation"`

	// specify the chunksize for the table
	ChunkSize int64 `toml:"chunk-size" json:"chunk-size"`
}

TableConfig is the config of table.

func (*TableConfig) Valid

func (t *TableConfig) Valid() bool

Valid returns true if table's config is valide.

type TaskConfig

type TaskConfig struct {
	Source       []string `toml:"source-instances" json:"source-instances"`
	Routes       []string `toml:"source-routes" json:"source-routes"`
	Target       string   `toml:"target-instance" json:"target-instance"`
	CheckTables  []string `toml:"target-check-tables" json:"target-check-tables"`
	TableConfigs []string `toml:"target-configs" json:"target-configs"`
	// OutputDir include these
	// 1. checkpoint Dir
	// 2. fix-target-sql Dir
	// 3. summary file
	// 4. sync diff log file
	// 5. fix
	OutputDir string `toml:"output-dir" json:"output-dir"`

	SourceInstances    []*DataSource
	TargetInstance     *DataSource
	TargetTableConfigs []*TableConfig
	TargetCheckTables  filter.Filter

	FixDir        string
	CheckpointDir string
	HashFile      string
}

TaskConfig is the config for sync diff

func (*TaskConfig) ComputeConfigHash

func (t *TaskConfig) ComputeConfigHash() (string, error)

ComputeConfigHash compute the hash according to the task if ConfigHash is as same as checkpoint.hash we think the second sync diff can use the checkpoint.

func (*TaskConfig) Init

func (t *TaskConfig) Init(
	dataSources map[string]*DataSource,
	tableConfigs map[string]*TableConfig,
) (err error)

Init return a new config

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL