美文网首页大数据 爬虫Python AI Sql
Greenplum · 源码阅读 · gpbackup的参数检查

Greenplum · 源码阅读 · gpbackup的参数检查

作者: sinwaj | 来源:发表于2020-08-05 19:53 被阅读0次

一.背景

gpbackup是Greenplum的备份工具,作为实验工具,鼓励大家去使用,推动该工具的成熟。该工具是用go语言开发,采用ginkgo框架进行BDD测试为快速开发的质量提供保证。虽然gpbackup只是一个备份数据的命令,但其中蕴含了Greenplum的大量知识,通过对该工具的源码分析,从而达到对Greenplum的进一步理解。本文主要分析DoFlagValidation函数。

二.DoFlagValidation函数

该函数是对gpbackup的参数合法性进行校验,为后续备份动作提供预检功能。

1.模块依赖关系

主函数为gpbackup.go的main函数。

图1 模块依赖图

1)backup.go 数据备份业务流程。

2)validate.go参数合法性校验业务。

3)options/flag.go参数相关性检查。

4)global_variables.go 获取参数数值、检查是否是布尔类型。

5)util/util.go 路径参数检查、压缩参数检查。

6)filepath/filepath.go日期格式检查。

2.关键函数说明

2.1 validateFlagCombinations函数

func validateFlagCombinations(flags*pflag.FlagSet) {

//参数相关性检查

options.CheckExclusiveFlags(flags, options.DEBUG, options.QUIET, options.VERBOSE)

options.CheckExclusiveFlags(flags, options.DATA_ONLY, options.METADATA_ONLY, options.INCREMENTAL)

options.CheckExclusiveFlags(flags, options.INCLUDE_SCHEMA, options.INCLUDE_SCHEMA_FILE, options.INCLUDE_RELATION, options.INCLUDE_RELATION_FILE)

options.CheckExclusiveFlags(flags, options.EXCLUDE_SCHEMA, options.EXCLUDE_SCHEMA_FILE, options.INCLUDE_SCHEMA, options.INCLUDE_SCHEMA_FILE)

options.CheckExclusiveFlags(flags, options.EXCLUDE_SCHEMA, options.EXCLUDE_SCHEMA_FILE, options.EXCLUDE_RELATION, options.INCLUDE_RELATION, options.EXCLUDE_RELATION_FILE, options.INCLUDE_RELATION_FILE)

options.CheckExclusiveFlags(flags, options.JOBS, options.METADATA_ONLY, options.SINGLE_DATA_FILE)

options.CheckExclusiveFlags(flags, options.METADATA_ONLY, options.LEAF_PARTITION_DATA)

options.CheckExclusiveFlags(flags, options.NO_COMPRESSION, options.COMPRESSION_LEVEL)

options.CheckExclusiveFlags(flags, options.PLUGIN_CONFIG, options.BACKUP_DIR)

//增量备份必须有开始时间

if MustGetFlagString(options.FROM_TIMESTAMP)!= "" && !MustGetFlagBool(options.INCREMENTAL) {

gplog.Fatal(errors.Errorf("--from-timestamp must be specified with --incremental"),"")

}

if MustGetFlagBool(options.INCREMENTAL)&& !MustGetFlagBool(options.LEAF_PARTITION_DATA) {

gplog.Fatal(errors.Errorf("--leaf-partition-data must be specified with --incremental"),"")

}

}

2.2 validateFlagValues函数

func validateFlagValues() {

//检查备份路径

err:=utils.ValidateFullPath(MustGetFlagString(options.BACKUP_DIR))

gplog.FatalOnError(err)

//检查备份的插件路径

err=utils.ValidateFullPath(MustGetFlagString(options.PLUGIN_CONFIG))

gplog.FatalOnError(err)

//检查压缩比参数

err=utils.ValidateCompressionLevel(MustGetFlagInt(options.COMPRESSION_LEVEL))

gplog.FatalOnError(err)

//检查日期格式

if MustGetFlagString(options.FROM_TIMESTAMP)!= "" && !filepath.IsValidTimestamp(MustGetFlagString(options.FROM_TIMESTAMP)) {

gplog.Fatal(errors.Errorf("Timestamp %s is invalid.  Timestamps must be in the format YYYYMMDDHHMMSS.",

MustGetFlagString(options.FROM_TIMESTAMP)),"")

}

}

三、代码位置

https://github.com/greenplum-db/gpbackup/tree/master/backup

相关文章

网友评论

    本文标题:Greenplum · 源码阅读 · gpbackup的参数检查

    本文链接:https://www.haomeiwen.com/subject/qamorktx.html