重构 MapR 插件代码

https://blueprints.launchpad.net/sahara/+spec/mapr-refactor

MapR 插件的代码应该被重构,以便于添加新的服务和版本

问题描述

当前的插件实现存在一些弱点: * 服务的声明性 * 由于使用 plugin-spec.json 导致的代码复杂性 * 几乎所有操作都以一系列实用函数调用的形式实现 * 行为与模块和类的分离不明确 * 部分代码冗余

提议的变更

  • 将 Service 实体提取到具有可定制行为的独立类中

  • 将配置逻辑从实用模块移动到专用类中

  • 删除冗余代码

MapR 插件实现将其所有操作委托给 VersionHandler 接口中的对应方法。VersionHandler 接口模仿插件 SPI,并添加了 get_context(cluster) 和 get_services() 方法。get_context 返回的 ClusterContext 对象包装了作为参数传递的 cluster 对象,并提供有关 cluster 的其他信息以及与包装 cluster 相关的实用方法。

服务定义位于 ‘sahara.plugins.mapr.services’ 包中,而不是 plugin-spec.json,后者已被完全移除。每个服务定义代表服务的特定版本。

替代方案

保持代码“原样”

数据模型影响

REST API 影响

其他最终用户影响

部署者影响

开发者影响

MapR 插件后续版本的开发者应考虑这些更改。

Sahara-image-elements impact

Sahara-dashboard / Horizon 影响

实现

负责人

主要负责人

aosadchiy

其他贡献者

ssvinarchuk

工作项

  1. 将 Service 实体提取到具有可定制行为的独立类中

  2. 将配置逻辑从实用模块移动到专用类中

  3. 删除冗余代码

依赖项

测试

现有的集成测试已经足够

文档影响

参考资料