美文网首页大数据 爬虫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