Skip to content

实现 ShardingSphere v4 到 v5 的配置文件升级 #1

@sandynz

Description

@sandynz

5.0.0版本的配置文件格式相对于4.x版本已经有了较大的变化。为了方便用户从4.x迁移到5.0.0,我们准备开发一个配置文件升级工具。

支持的版本范围

4.0.0, 4.0.1, 4.1.04.1.1 转换到 5.0.0

支持的配置来源

本地YAML配置文件。

不支持直接升级配置中心的配置。如果本机YAML配置已经同步到配置中心,可以把配置中心的配置手动生成一份本地YAML配置文件,然后再用升级工具处理。

1,准备工作:获取不同版本之间的配置差异

方式1:比较不同版本的配置

4.0.0...4.0.1, 4.0.1...4.1.04.1.0...4.1.1 来看,4.x版本之间没有破坏性的格式变动(小版本之间应该都是这个设计原则)。会有一些新增的配置,比如4.1.1YamlProxyRuleConfiguration新增了shadowRule

Sharding-JDBC 配置:

Sharding-Proxy 配置:

方式2:检查 API 变动历史

详情请参见 API Change History

方式3:在线比较不同版本的代码

示例:

方式4:比较不同版本的代码

下载源码之后从 tag (e.g. 4.1.1, 5.0.0) checkout,可以对比下shardingsphere/examples目录下的示例代码,比如:shardingsphere-jdbc-exampleshardingsphere-proxy-example

格式变动示例

Proxy server.yaml文件:

  • authentication段落已变为AUTHORITY规则

很多规则文件:

  • 属性名中的 '.' 已替换为 '-',比如:sql.show变为sql-showworker.id变为worker-idalgorithm.expression变为algorithm-expression。详情请参见本次提交

2,实现

基本框架已完成,需要实现V4ToV5ConfigUpgrade,具体位置已经加上TODO

相关模型类:

  • ShardingSphereProductType: 代表ShardingSphere产品类型,目前包括:JDBCPROXY
  • ShardingSphereSeries: 代表版本系列,比如:v4, v5
  • SeriesConfigItem: 代表一个配置文件,包括:名称、内容文本、内容反序列化之后的对象。
  • SeriesConfigItems: 代表一个版本系列的一组配置文件。老版本和新版本各有一组,老版本的作为输入参数,新版本的作为输出结果。

基本思路及步骤:

  • 对于每一个配置文件,使用v4版本提供的反序列化器获得v4版本的模型对象,然后根据版本间的配置差异把v4版本的模型对象手工转换为v5版本的模型对象
  • 把上一步获取到的v5版本的模型对象存入SeriesConfigItem.contentObject、序列化之后存入SeriesConfigItem.content
  • 把上一步获取到的SeriesConfigItem对象通过SeriesConfigItems.addConfigItem存入SeriesConfigItems
  • 返回前面用到的SeriesConfigItems对象

相关工具类:

  • YamlEngine: YAML序列化和反序列化

注意事项:

  • config-upgrade-shardingsphere-shade-v4config-upgrade-shardingsphere-shade-v5提供了包名重写过的ShardingSphere依赖包,不保证需要用到的jar包都已经加入依赖,可以根据需要额外添加。

开始参与贡献

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions