CDH 插件代码重构¶
https://blueprints.launchpad.net/sahara/+spec/cdh-plugin-refactoring
本规范旨在对代码进行重构,以便将来更容易支持新版本。
问题描述¶
CDH 插件包含大量重复代码。当前实现提取了一些插件的通用和基础行为,每个版本都有其自身实现,用于处理未包含在基础类和模块中的内容。但由于向下兼容性,版本之间存在很多重叠。例如,sahara.plugins.cdh.v5.config_helper 扩展了 sahara.plugins.cdh.db_helper,但诸如 get_plugin_configs 之类的函数在 sahara.plugins.cdh.v5_3_0.config_helper 中被重新编写。
目前 CDH 插件的测试覆盖率较低,这使得在重构后难以保证新代码的质量。因此,需要添加一些新的单元测试用例。并且根据重构,一些旧的测试用例可能需要修改。
提议的变更¶
对于插件每个版本中的重复代码,将其移动到基础类中。在验证模块中,validate_cluster_creating 函数过长,难以阅读。将其分解为几个小的、清晰的函数。我们可以将模块中的函数封装到一个类中,以获得更好的可扩展性。ClouderaUtils 和 deploy 模块在 CDH v5 完全移除之前不会被更改,因为这些模块在 v5 中的代码与其他版本差异很大。
替代方案¶
还有另一种方法,就是让新版本扩展旧版本,而不是所有版本都从基础版本扩展。这在弃用旧版本时可能会带来问题。
数据模型影响¶
无
REST API 影响¶
无
其他最终用户影响¶
无
部署者影响¶
无
开发者影响¶
无
Sahara-image-elements impact¶
无
Sahara-dashboard / Horizon 影响¶
无
实现¶
负责人¶
- 主要负责人
jxwang
工作项¶
这将需要以下更改
将重复代码移动到基础类。需要修改的文件:sahara/plugin/cdh/version/edp_engine.py: EdpOozieEngine, EdpSparkEngine sahara/plugin/cdh/version/plugin_utils.py: PluginUtils sahara/plugin/cdh/version/versionhandler.py: VersionHandler sahara/plugin/cdh/version/config_helper.py sahara/plugin/cdh/version/validation.py
分离 Validation.validate_cluster_creating 函数
为覆盖率低的模块添加单元测试用例。
移除为重构而存在的无用测试用例:sahara/tests/unit/plugins/cdh/v5/test_versionhandler.py sahara/tests/unit/plugins/cdh/v5_3_0/test_versionhandler.py sahara/tests/unit/plugins/cdh/v5_4_0/test_versionhandler.py
依赖项¶
无
测试¶
在开始重构之前,保留当前的场景测试,并提供新的单元测试,以确保 CDH 像以前一样正常工作。对于每个版本,也分别添加单元测试。测试用例是在重构代码之前编写的,因此我们可能需要对新代码进行一些小的更改。
文档影响¶
无
参考资料¶
无